考研复试——高级语言程序设计

418 阅读2分钟

1、给定一个字符串,逆序输出。

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string s;
	cin >> s;
	int len = s.size();
	for (int i = len - 1; i >= 0; i--)
	{
		cout << s[i];
	}
	return 0;
}

2、输出100到1000之间能被5和6同时整除的数,输出格式为每十个数为一行。

#include<iostream>
using namespace std;

int main()
{
	int cnt = 0;
	for (int i = 100; i <= 1000; i++)
	{
		if (i % 5 == 0 && i % 6 == 0)
		{
			if (cnt % 10 == 0 && cnt != 0)
				cout << endl;
			cout << i << ' ';
			cnt++;
		}
	}
	return 0;
}

3、给定一个int型整数,输出这个整数的二进制中的0和1的个数。

注:这个题需要注意int型数据占32位bit位,所以最佳办法就是先统计1的个数,然后再用32去减去1的总数,就得出0的个数。

#include<iostream>
using namespace std;

int main()
{
	int num;
	cin >> num;
	int cnt_1 = 0, cnt_0 = 0;
	while (num > 0)
	{
		if (num % 2 == 1) cnt_1++;
		num = num >> 1;
	}
	cnt_0 = 32 - cnt_1;
	cout << "0的个数为:" << cnt_0 << " " << "1的个数为:" << cnt_1 << endl;
	return 0;
}

4、从1-20之间随机抽取5个数,分别输出抽取出的5个数和剩余未被抽取的15个数。

注:c++的随机数要引入#include "cstdlib" 库文件,调用rand()函数

要取得[0,n)  就是rand()%n     表示 从0到n-1的数
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
const int N = 21;
int arr[N];
int main()
{
    int cnt = 0;
    for (int i = 0; i < 100; i++)
    {
        if (cnt == 5) break;
        int num = (rand() % 20) + 1;
        if (arr[num] == 0)
        {
            arr[num] = 1;
            cnt++;
            continue;
        }
    }
    cout << "未被抽取的数为:" << endl;
    for (int i = 1; i < N; i++)
    {
        if (arr[i] == 0) cout << i << ' ';
    }
    cout << endl;
    cout << "被抽取的数为:" << endl;
    for (int i = 1; i < N; i++)
    {
        if (arr[i] == 1) cout << i << ' ';
    }
    return 0;
}

5、给定一个年份,判断是否为闰年。

注:闰年的判断条件为:是否能被400整除,或者能被4整除但不能被100整除

#include<iostream>
using namespace std;
int main()
{
    int year;
    cin >> year;
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
        cout << "YES";
    else cout << "NO";
    return 0;
}

6、输入n个数进行排序,要先按照奇偶再按照大小的顺序进行排序。

逆向思维:先进行从小到大的排序,然后两次遍历,第一次遍历找出奇数,第二次遍历找出偶数。

#include<iostream>
using namespace std;

void quick_sort(int* arr, int l, int r)
{
    if (l >= r) return;
    int i = l - 1;
    int j = r + 1;
    int poivt = arr[l + r >> 1];
    while (i < j)
    {
        do i++; while (arr[i] < poivt);
        do j--; while (arr[j] > poivt);
        if (i < j) swap(arr[i], arr[j]);
    }
    quick_sort(arr, l, j);
    quick_sort(arr, j + 1, r);
}

int main()
{
    int n;
    cin >> n;
    int a[1001];
    int i;
    for (i = 0; i < n; i++) cin >> a[i];
    quick_sort(a, 0, n - 1);
    for (i = 0; i < n; i++)
    {
        if (a[i] % 2 != 0)
            cout << a[i] << ' ';
    }
    for (i = 0; i < n; i++)
    {
        if (a[i] % 2 == 0)
            cout << a[i] << ' ';
    }
    return 0;

}


7、字符串的转换,如果是字符,则将Ascii码值加3输出(无论大小写),比如输入abCD输出deFG,非字母则原样输出。

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    cin >> s;
    int len = s.size();
    for (int i = 0; i < len; i++)
    {
        if ((s[i] <= 'Z' && s[i] >= 'A') || (s[i] <= 'z' && s[i] >= 'a'))
            s[i] += 3;
    }
    cout << s;
    return 0;
}

8、找出一个大于给定整数m且紧随m的素数

注:找出一个大于给定整数m且紧随m的素数
素数的判断:只能被1或自身整除的整数
基本算法:若num % i == 0,则说明m不是素数,其中i的取值范围为2 ——— num - 1

#include<iostream>
using namespace std;

int fun(int m)
{
	int i, k;
	for (i = m + 1; ; i++)
	{
		for (k = 2; k < i; k++)
			if (i % k == 0)
				break;
		if (k >= i)
			return i;
	}
}

int main()
{
	int m;
	cin >> m;
	cout << fun(m);
}

9、计算并输出k以内最大的10个能被13或17整除的自然数之和

#include<iostream>
using namespace std;

int main()
{
	int k;
	cin >> k;
	int cnt = 10;
	int sum = 0;
	while (cnt > 0)
	{
		if (k % 13 == 0 || k % 17 == 0)
		{
			sum += k;
			cnt--;
		}
		k--;
	}
	cout << sum;
	return 0;
}

10、判断回文数

#include<iostream>
using namespace std;

bool is_huiwenshu(int num)
{
	int c, t = 0;
	c = num;
	while (c > 0)
	{
		t = t * 10 + c % 10;
		c = c / 10;
	}
	if (t == num)
		return true;
	else return false;
}

int main()
{
	int num;
	cin >> num;
	cout << is_huiwenshu(num);
	return 0;
}

11、计算并输出high以内的10个最大素数之和

#include<iostream>
using namespace std;

bool is_sushu(int num)
{
	for (int i = 2; i < num; i++)
		if (num % i == 0)
			return false;
	return true;
}

int main()
{
	int num;
	cin >> num;
	int cnt = 0;
	int sum = 0;
	while (num > 1)
	{
		if (is_sushu(num) == true)
		{
			sum += num;
			cnt++;
		}
		num--;
		if (cnt == 10)
			break;

	}
	cout << sum;
	return 0;
}

12、计算字符串s中含有字符串t的数目

#include<iostream>
#include<string>
using namespace std;

int count(string s, string t)
{
	int i, j, k, num = 0;
	for (i = 0; s[i] != '\0'; i++)
		for (j = i, k = 0; t[k] == s[j]; k ++ ,j++)
			if (t[k + 1] == '\0')
			{
				num++;
				break;
			}
	return num;
}


int main()
{
	string s, t;
	cin >> s >> t;
	cout << count(s, t);
	return 0;
}

13、判断水仙花数

水仙花数必须包含三位数以上,并且每位数的立方加起来等于该数本身,则称之为水仙花数。

#include<iostream>
using namespace std;
bool fun(int num)
{
    if(num / 100 == 0) return false;
    int t = num;
    int sum = 0;
    while(t > 0)
    {
        int tem = t % 10;
        sum += tem * tem * tem;
        t = t / 10;
    }
    if(sum == num) return true;
    else return false;
}
int main()
{
    int num;
    cin >> num;
    cout << fun(num) << endl;
    return 0;
}