220409蓝桥杯C语言大学C组手算填空题T^T


只学到指针前的知识,做蓝桥杯能做到什么程度?

试题 A: 排列字母

本题总分:5 分

【问题描述】
小蓝要把一个字符串中的字母按其在字母表中的顺序排列。
例如,LANQIAO 排列后为 AAILNOQ。
又如,GOODGOODSTUDYDAYDAYUP 排列后为 AADDDDDGGOOOOPSTUUYYY。
请问对于以下字符串,排列之后字符串是什么?
WHERETHEREISAWILLTHEREISAWAY
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个由大写字母组成的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。
手算图片
哈哈哈,简单粗暴。

#include<stdio.h>
int main()
{
	int i=0,j=1;
	char rph[100];
	char a;
	scanf("%s",&rph);/*输入一串字符串到数组里*/
	for(i=0;rph[i]!=NULL;i++)
	/*当数组最后一个的时候,跳出*/
	{
		for(j=i+1;rph[j]!=NULL;j++)
		{
			if(rph[j]<rph[i])
			/*当数组后面的一个和前面的进行比较*/
			{
			a=rph[i];
			rph[i]=rph[j];
			rph[j]=a;
			}/*后面的比前面的小,就交换*/
		}
		printf("%c",rph[i]);
	}
	return 0;
} 

在这里插入图片描述

试题 B: 特殊时间

本题总分:5 分
【问题描述】
2022 年 2 月 22 日 22:20 是一个很有意义的时间,年份为 2022,由 3 个 2 和 1 个 0 组成,如果将月和日写成 4 位,为 0222,也是由 3 个 2 和 1 个 0 组成,如果将时间中的时和分写成 4 位,还是由 3 个 2 和 1 个 0 组成。
小蓝对这样的时间很感兴趣,他还找到了其它类似的例子,比如 111 年 10月 11 日 01:11,2202 年 2 月 22 日 22:02 等等。
请问,总共有多少个时间是这种年份写成 4 位、月日写成 4 位、时间写成4 位后由 3 个一种数字和 1 个另一种数字组成。注意 1111 年 11 月 11 日 11:11不算,因为它里面没有两种数字。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

在这里插入图片描述
T_T

试题 C: 纸张尺寸

时间限制: 1.0s 内存限制: 256.0MB 本题总分:10 分
【问题描述】
在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm × 841mm,将 A0 纸沿长边对折后为 A1 纸,大小为 841mm × 594mm,在对折的过程中长度直接取下整(实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸,依此类推。
输入纸张的名称,请输出纸张的大小。
【输入格式】
输入一行包含一个字符串表示纸张的名称,该名称一定是 A0、A1、A2、A3、A4、A5、A6、A7、A8、A9 之一。
【输出格式】
输出两行,每行包含一个整数,依次表示长边和短边的长度。
【样例输入 1】
A0
【样例输出 1】
1189
841
【样例输入 2】
A1
【样例输出 2】
841
59

我不知道C语言里转数字怎么转了的时候……

#include<stdio.h>
int main()
{
	int i=0,rph=0,j=0;
	int l=1189,w=841;
	char r[1][2];
	scanf("%s",&r);
	if(r[0][1]=='0')
	{i=0;}
	else if(r[0][1]=='1')
	{i=1;}
	else if(r[0][1]=='2')
	{i=2;}
	else if(r[0][1]=='3')
	{i=3;}
	else if(r[0][1]=='4')
	{i=4;}
	else if(r[0][1]=='5')
	{i=5;}
	else if(r[0][1]=='6')
	{i=6;}
	else if(r[0][1]=='7')
	{i=7;}
	else if(r[0][1]=='8')
	{i=8;}
	else if(r[0][1]=='9')
	{i=9;}
	for(j=0;j<i;j++)
	{
		rph=l;
		l=w;
		w=rph/2;
	}
	printf("%d\n%d",l,w);
	return 0;
}

试题 D: 求和

时间限制: 1.0s 内存限制: 256.0MB 本题总分:10 分
【问题描述】
给定 n 个整数 a1, a2, · · · , an ,求它们两两相乘再相加的和,即S = a1 · a2 + a1 · a3 + · · · + a1 · an + a2 · a3 + · · · + an−2 · an−1 + an−2 · an + an−1 · an.
【输入格式】
输入的第一行包含一个整数 n 。
第二行包含 n 个整数 a1, a2, · · · an。
【输出格式】
输出一个整数 S,表示所求的和。请使用合适的数据类型进行运算。
【样例输入】
4
1 3 6 9
【样例输出】
117
【评测用例规模与约定】
对于 30% 的数据,1 ≤ n ≤ 1000,1 ≤ ai ≤ 100。
对于所有评测用例,1 ≤ n ≤ 200000,1 ≤ ai ≤ 1000。

#include<stdio.h>
int main()
{
	int n=1,i=0,s=0,j=1;
	scanf("%d",&n);
	int b[n];
	for(i=0;i<n;i++)
	{
		scanf("%d",&b[i]);
	}
	for(i=0;i<n;i++)
	{
		for(j=i+1;j<n;j++)
		{
			s+=b[i]*b[j];
		}
	}
	printf("%d",s);
	return 0;
}

第四题运行结果

试题 E: 数位排序

时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分
【问题描述】
小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。
例如,2022 排在 409 前面,因为 2022 的数位之和是 6,小于 409 的数位之和 13。
又如,6 排在 2022 前面,因为它们的数位之和相同,而 6 小于 2022。
给定正整数 n,m,请问对 1 到 n 采用这种方法排序时,排在第 m 个的元素是多少?
【输入格式】
输入第一行包含一个正整数 n。
第二行包含一个正整数 m。
【输出格式】
输出一行包含一个整数,表示答案。
【样例输入】
13
5
【样例输出】
3
试题 E: 数位排序 6
第十三届蓝桥杯大赛软件赛省赛 C/C++ 大学 C 组
【样例说明】
1 到 13 的排序为:1, 10, 2, 11, 3, 12, 4, 13, 5, 6, 7, 8, 9。第 5 个数为 3。
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ m ≤ n ≤ 300。
对于 50% 的评测用例,1 ≤ m ≤ n ≤ 1000。
对于所有评测用例,1 ≤ m ≤ n ≤ 106。

#include<stdio.h>
int main()
{
	int n=1,m=1,i=0,r=0,rph=0,rph1=0,rph2=0,j=0;
	scanf("%d",&n);
	scanf("%d",&m);
	int answer[n],answer2[n];
	for(i=0;i<n;i++){
		answer[i]=i+1;
	}
	for(i=0;i<n;i++)
	{
		rph=0;
		for(r=answer[i];r>0;r/=10)
		{
			rph=rph+r%10;
			answer2[i]=rph;
		}
	}
	for(i=0;i<n;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(answer2[j]<answer2[i])
			{
				rph2=answer2[j];
				answer2[j]=answer2[i];
				answer2[i]=rph2;
				rph1=answer[j];
				answer[j]=answer[i];
				answer[i]=rph1;
			}
		}
	}
	printf("%d",answer[m-1]);
	return 0;
}

这题我先把1-n的数放进第一个数组里去了。
然后把它们的数位之和在第二个数组里进行排序的时候,第二个数组交换的时候第一个数组对应的也交换,我知道这可能有点蠢,嗯……但,有人能教教我怎么做?

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

江慕途征

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

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

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

打赏作者

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

抵扣说明:

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

余额充值