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

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

#include<iostream>
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<iostream>
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<iostream>
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<iostream>
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<iostream>
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<iostream>
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;
}
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kpacnB_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值