2017年内蒙古大学计算机学院专业课复试真题级答案

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


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

第三题 是输入一个整数,判断是不是回文数,例如101,12121之类

    int n;
	while (cin >> n&&n != -1)
	{
		int a[1000];
		int i = 0;
		int m = n;
		bool judge = true;
		while (m)
		{
			a[i] = m % 10;
			i++;
			m = m / 10;
		}
		i = i - 1;
		for (int j = 0; j <= i; j++,i--)
		{
			if (a[j] != a[i])  judge = false;
		}
		if (judge == true) cout << "YES" << endl;
		else cout << "NO" << endl;
	}

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

    char a[1000], b[1000];
	int a_l = 0;
	cin >> a;
	cin >> b;
	a_l = strlen(a);
	for (int i = 0,j=a_l-1; i <= j; i++,j--)
	{
		char b = a[i];
		a[i] = a[j];
		a[j] = b;
	}
	strcat_s(b, a);
	cout << b;

第五题 首先输入两个正整数,m(2<=m<=36)和n(2<=m<=36),然后输入一个m进制的数字串,将这个数字串转换为n进制并输出。如果进制超过9,那么用小写字母’a’到’z’依次表示10~35的数字。(假设数字串对应的十进制数用int存储不溢出)
答:
n进制化十进制:按位乘n的i次方后相加,小数点左边第一位0次方,第二位1次方,以此类推,比如n进制数字1234,换成10进制后为4×n0+3×n1+2×n2+1×n3
十进制化n进制:反复除n取余数,除n的得数再取余数,直到得数为0,把余数按顺序从低位到高位写出即可,比如1234换八进制,第1次除8得154余2,154除8得19余2,19除8得2余3,2除8得0余2,所以最后得到2322

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <iomanip>
#include<math.h>
#include<String.h>
using namespace std;
int ToTen(int m , char a[])
{
	int num=0,t;
	int result = 0;
	int length = strlen(a);
	for (int i = length - 1; i >= 0; i-- , num++)
	{
		if ( a[i] >= 'a'&&a[i] <= 'Z')  t = int(a[i] - 'a' + 10);
		else t = int(a[i] - '0');
		result += t * pow(double(m), double(num));
	}
	return result;
}
void to_N(int num_ten, int n, char b[])
{
	int yu, chu;
	chu = num_ten;
	int i = 0;
	while (chu)
	{
		yu = num_ten%n;
		chu = num_ten / n;
		if (yu > 9) b[i++] = char( yu-10+'a');
		else  b[i++] = char(yu+'0');
	}
	i = i - 1;
	for (int j = 0; j <= i; j++,i--)
	{
		char mid = b[j];
		b[j] = b[i];
		b[i] = mid;
	}
}
int main()
{
	int n, m;
	char a[100];
	char b[100];
	cin >> m >> n;
	cin >> a;
	int num_ten = ToTen(m,a);
	cout << num_ten << endl;
	to_N(num_ten , n , b);
	cout << b << endl;
	system("pause");
}

第六题 输入一个正整数n(n`<=30),输出n所对应的蛇形矩阵。
在这里插入图片描述

i:控制行号
s-i:控制列号
d: 控制方向
s: 路径长度
void display(int n, int a[][10])     //输出n对应的蛇形矩阵
{
	int s = 0, i = 0, d = -1;
	while (n >= 1)                  //生成蛇形矩阵,存储在a[][10]数组中
	{                               
		int cnt = 0;
		while (cnt <= s)
		{
			a[i][s - i] = n--;
			cnt++;
			i += d;
		}
		s++;
		d = -d;
		i = d>0 ? 0 : s;
	}
	int j;
	for (i = 0; i<10; i++)          //输出n对应的蛇形矩阵
	{ 
		if (a[i][0] <= 0)
			break;
		for (j = 0; j<10; j++)
			if (a[i][j]>0)
				cout << a[i][j] << ' ';
		cout << endl;
	}
}
int main()
{
	int n, a[10][10] = { 0 };
	cin >> n;
	display(n, a);
}

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

    int n,m=0;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		if (i % 7 == 0) m++;
		else{
			int j = i;
			while (j != 0)
			{
				if (j % 10 == 7) { m++; break; }
				j = j / 10;
			}
		}
	}
	cout << m << endl;

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值