内蒙古大学2017年计算机复试笔试真题题目及源码参考答案

第一题
  输入一组由正整数组成的数字序列,序列大小不超过500,遇到-1结束输入,判断这个数字序列是否是升序。如果是升序,输出“YES”,如果不是升序,输出“NO”。

#include
using namespace std;

int main(){
     
    int a[500];
    int n, i = 0;
    bool judge = true;
    while(cin>>n && n!=-1 && i<500){
     
        a[i] = n;
        if(a[i] < a[i-1])
            judge = false;
        i++;
    }
    if(judge == false){
     
        cout<<"NO"<<endl;
    }else{
     
        cout<<"YES"<<endl;
    }
    return 0;
}

第二题
  输入一个正整数n,判断不超过n的所有数中与7有关的数有多少个。如果某个数是7或者是7的倍数,或者这个数的某一位是7,那么这个数便与7有关。举个例子,如果输入的n是20,那么20以内与7有关的数便是:7、14、17,最终输出结果是3。

#include
using namespace std;

int total(int n){
     
    int count = 0;
    for(int i=1; i<=n; i++){
     
        if(i%7==0){
     
            count++;
        }else{
     
            int t = i;
            while(t){
     
                if(t%10==7){
     
                    count++;
                    break;
                }
                t /= 10;
            }
        }
    }
    return count;
}

int main(){
     
    int n;
    cin>>n;
    cout<<total(n)<<endl;
    return 0;
}

第三题
  输入一个正整数,判断这个数是否是“回文数”。所谓“回文数”,便是正着念和反着念都一样的数。比如,1、11、121、1221、12321,都是回文数。如果这个输入的数是回文数,那么输出“YES”,如果不是回文数,输出“NO”。

#include
using namespace std;

bool isHuiWen(int n){
     
    int a[100], i = 0;
    bool flag = true;
    while(n){
     
        a[i++] = n % 10;
        n /= 10;
    }
    for(int j = 0; j < i; j++,i--){
     
        if(a[j] != a[i-1]) {
     
            flag = false;
            break;
        }
    }
    return flag;
}

int main(){
     
    int n;
    cin>>n;
    if(isHuiWen(n)){
     
        cout<<"YES"<<endl;
    }else{
     
        cout<<"NO"<<endl;
    }
    return 0;
}

第四题
  输入两个字符串,str1 和 str2,将字符串 str2 逆序之后连接到字符串 str1 后面,最后输出str1。举个例子,如果输入的字符串 str1 是"abc", 字符串 str2是"123",那么逆序连接之后,输出的结果为"abc321"。

#include
using namespace std;

void strcat(char * str1,char * str2){
     
    int a = strlen(str1);
    int b = strlen(str2);
    for(int i = 0; i < b; i++){
     
        str1[a++] = str2[b-i-1];
    }
    str1[a] = '\0';
}

int main(){
     
    char str1[1000],str2[1000];
    cin>>str1;
    cin>>str2;
    strcat(str1,str2);
    cout<<str1<<endl;
    return 0;
}

第五题
  首先输入两个正整数,m(2<=m<=36)和n(2<=n<=36),然后输入一个m进制的数字串,将这个数字串转换为n进制并输出。如果进制超过9,那么用小写字母’a’到’z’依次表示10~35的数字。(假设数字串对应的十进制数用int存储不溢出)

#include
using namespace std;

int mToTen(char *s, int m){
     	//s:m进制的数字串,m:原进制
    int num = 0, t = 0, d = 1;
    int i = strlen(s) - 1;
    for( ; i >= 0; i-- ){
     
        if(s[i] - '0' >= m){
     
            cout<<"请输入正确的"<<m<<"进制数"<<endl;
            return 0;
        } else if( s[i] >= 'a' && s[i] <= 'z' ){
     
            t = s[i] - 'a' + 10;
        } else {
     
            t = s[i] - '0';
        }
        num += t * d;
        d *= m;
    }
    return num;
}

void tenToN(int num, int n, char *s){
     	//num:十进制数,n:目标进制,s:用于存储转换后的字符串
    char temp[100];
    int i = 0;
    while(num){
     
        int a = num % n;
        if( a > 9 ){
     
            temp[i] = a - 10 + 'a';
        } else {
     
           temp[i] = a + '0';
        }
        i++;
        num /= n;
    }
    for (int j = 0 ; j < i; j++){
     
        s[i-j-1] = temp[j];
    }
    s[i] = '\0';
}

int main(){
     
    int m,n;
    char s[100];
    cin>>m>>n;
    cin>>s;
    int b = mToTen(s,m);
    tenToN(b,n,s);
    cout<<s<<endl;
    return 0;
}

第六题
  输入一个正整数n(n<=30),输出n所对应的蛇形矩阵。例如:
  n=10时,蛇形矩阵为:
  10 9 5 4
  8 6 3
  7 2
  1

#include
using namespace std;

void display(int n,int a[][10]){
      
    if(n >= 1 && n <= 30){
     
        int k = n;
        for(int i = 0; i < n; i++){
           //i控制第几条对角线,从0开始
            if(i % 2){
            //奇数对角线
                for(int j = 0; j <= i; j++){
     
                    a[j][i-j] = k--;
                }
            }else{
             //偶数对角线
                for(int j = 0; j <= i; j++){
     
                    a[i-j][j] = k--;
                }
            }
        }
    }
    for(int i = 0; i < 10; i++){
     
        for(int j = 0; j < 10; j++){
     
            if(a[i][j] >= 1){
     
                cout<<a[i][j]<<" ";
            }
        }
        cout<<endl;
    }
}

int main(){
     
    int n,a[10][10];
    cin>>n;
    display(n,a);
    return 0;
}

你可能感兴趣的:(算法,c++)