“蓝桥杯”练习系统——基础练习

1. 闰年判断(水题)

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int num;
	cin >> num;
	if (num % 400 == 0 || (num % 4 == 0 && num % 100 != 0))
		cout << "yes" << endl;
	else
		cout << "no" << endl; 
	return 0;
} 

2.01字串(水题)

思路:将0-31的数字转化为2进制输出即可,printf只能转化8/16进制不能转化为2进制输出,可以利用itoa函数进行,itoa函数会对其第一个参数进行修改,所以不要直接将循环变量i作为itoa的参数。

#include <bits/stdc++.h>

using namespace std;

int main()
{
	char str[5];
	for (int i = 0; i <= 31; ++i)
	{
		int t = i;
		itoa(t, str, 2);
		int num = 5-strlen(str);
		while(num--)
			cout << "0";
		printf("%s\n", str);
	}
	return 0;
} 

3. 字母图形(找规律)

思路:n行m列,共使用到英文字母表的前m个大写字母;

对于第i行(1 <= i <= n):前i-1个字符为倒序输出到B(同时个数不超过m的限制);后m-i+1个字符为从A开始正序输出。

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int m, n;
	cin >> n >> m;
	for (int i = 0; i < n; ++i)
	{
		int t = m;
		for (int j = i; j > 0 && t > 0; --j, --t)
		{
			cout << (char)('B' + j -1);
		}
		for (int j = 0; j < m - i; ++j)
			cout <<(char)('A' + j);
		cout << endl; 
	}
	return 0;
} 

4. 数字特征(水题)

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int num, key, min = INT_MAX, max = INT_MIN, sum = 0;
	cin >> num;
	while (num--)
	{
		cin >> key;
		if (key < min)
			min = key;
		if (key > max)
			max = key;
		sum += key;
	}
	cout << max << endl << min << endl << sum << endl;
	return 0;
} 

5. 查找整数(水题)

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int num;
	cin >> num;
	vector<int>data(num);
	for (int i = 0; i < num; ++i)
		cin >> data[i];
	int key;
	cin >> key;
	int i;
	for (i = 0; i < num; ++i)
	{
		if (key == data[i])
		{
			cout << i + 1 << endl;
			break;
		}
	}
	if (i == num)
		cout << "-1" << endl;
	return 0;
} 

6. 杨辉三角形(找规律)

思路:数组单元data[i][j] = data[i-1][j] + data[i-1][j-1];

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int num;
	cin >> num;
	vector<vector<int> >data(num, vector<int>(num));
	for (int i = 0; i < num; ++i)
	{
		for (int j = 0;j <= i; ++j)
		{
			if (j == 0 || j == i)
				data[i][j] = 1;
			else
				data[i][j] = data[i-1][j] + data[i-1][j-1];
			if (j != 0)
				cout << " ";
			cout << data[i][j];
			if (j == i)
				cout << endl;
		}
	}
	return 0;
} 

7. 特殊的数字(水题)

#include <bits/stdc++.h>

using namespace std;

int main()
{
	for(int i = 100; i < 1000; ++i)
	{
		if (i == pow(i / 100, 3) + pow(i / 10 % 10, 3) + pow(i % 10, 3))
			cout << i << endl;
	}
	return 0;
} 

8. 回文数(水题)

#include <bits/stdc++.h>

using namespace std;

int main()
{
	for (int i = 1000; i < 10000; ++i)
	{
		if (i / 1000 == i % 10 && i / 10 % 10 == i / 100 % 10)
			cout << i << endl;
	}
	return 0;
} 

9.特殊回文数(水题)

思路:将数字转换成字符串与其倒置字符串相比较筛选出回文数,然后将回文数的各位相加筛选出与输入num相等的数并输出。

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int num;
	cin >> num;
	for (int i = 10000; i < 1000000; ++i)
	{
		int sum = 0, t = i;
		stringstream ss;
		string key;
		ss << t;
		ss >> key;
		string pkey = key;
		reverse(key.begin(), key.end());
		if (pkey == key)
		{	
			do{
				sum += (t % 10);
				t /= 10;
			}while(t);
			if (sum == num)
				cout << i << endl;
		} 
	}
	return 0;
} 

10. 十进制转十六进制(水题)

思路:直接用printf函数进行转化即可

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int num;
	scanf("%d", &num);
	printf("%X", num);
	return 0;
} 

11. 十六进制转十进制(水题)

思路:直接用printf函数进行转化即可,注意题目要求输入输出均为正数,当输入FFFFFFFF时,int类型变量存储全为1,以%d输出默认为补码即-1,应当以无符号十进制%u输出即4294967295。

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int num;
	scanf("%X", &num);
	printf("%u", num);
	return 0;
} 

12. 十六进制转八进制(大数进制转换)

思路:题目中每个十六进制数num长度不超过100000,对于这种超大的数字不能用常规的变量来存储,可以用字符串存储。每3位2进制数对应4位8进制数,所以可以先将num前补0使其长度为3的倍数,然后每次取高3位数转换为对应的4位8进制数进行输出。转换过程可以先将16进制数转化为10进制数,再利用itoa函数转化为8进制数。注意转换的8进制数可能不为4位,输出时需要左补0。

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int num;
	cin >> num;
	while(num--)
	{		
		string key;
		cin >> key;
		//将16进制串长度补为3的倍数 
		int len = (int)key.size();
		if (len % 3 != 0)
		{
			for (int i = 0; i < 3- len % 3; ++i)
			{
				key = "0" + key;
			}
			len = (int)key.size();
		}
		string t;
		while((int)key.size() != 0)
		{
			t = key.substr(0, 3);
			//16进制字符串转10进制数
			int num10 = 0;
			if (t[0] >= 'A')
				num10 += 16*16*(10 + (t[0] - 'A'));
			else
				num10 += 16*16*(t[0] - '0');
			if (t[1] >= 'A')
				num10 += 16*(10 + (t[1] - 'A'));
			else
				num10 += 16*(t[1] - '0');
			if (t[2] >= 'A')
				num10 += 10 + (t[2] - 'A');
			else
				num10 += t[2] - '0';
			//10进制数转4位8进制数 
			char num8[4];
			itoa(num10, num8, 8);
			if (len != (int)key.size())
			{	
				for (int i = 0; i < 4 - strlen(num8); ++i)
				{
					cout << "0";  
				}
			}
			cout << num8;
			key = key.substr(3, (int)key.size() - 3);
		}
		cout << endl;
	}
	return 0;
} 

13. 数列排序(水题)

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int num;
	cin >> num;
	vector<int>data(num);
	for(int i = 0; i < num; ++i)
	{
		cin >> data[i];
	}
	sort(data.begin(), data.end());
	cout << data[0];
	for(int i = 1; i < num; ++i)
	{
		cout << " " << data[i];
	}
	cout << endl;
	return 0;
} 

 


版权声明:本文为qq_42283621原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。