蓝桥杯试题C语言答案.docx

上传人:b****5 文档编号:29384872 上传时间:2023-07-22 格式:DOCX 页数:12 大小:18.60KB
下载 相关 举报
蓝桥杯试题C语言答案.docx_第1页
第1页 / 共12页
蓝桥杯试题C语言答案.docx_第2页
第2页 / 共12页
蓝桥杯试题C语言答案.docx_第3页
第3页 / 共12页
蓝桥杯试题C语言答案.docx_第4页
第4页 / 共12页
蓝桥杯试题C语言答案.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

蓝桥杯试题C语言答案.docx

《蓝桥杯试题C语言答案.docx》由会员分享,可在线阅读,更多相关《蓝桥杯试题C语言答案.docx(12页珍藏版)》请在冰豆网上搜索。

蓝桥杯试题C语言答案.docx

蓝桥杯试题C语言答案

1、A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些

人参加了竞赛:

(1)A参加时,B也参加;

(2)B和C只有一个人参加;

(3)C和D或者都参加,或者都不参加;

(4)D和E中至少有一个人参加;

(5)如果E参加,那么A和D也都参加。

00110c、d

#include

intmain()

{

inta,b,c,d,e;/*0表示不参加,1表示参加.*/

for(a=0;a<2;a++)

for(b=0;b<2;b++)

for(c=0;c<2;c++)

for(d=0;d<2;d++)

for(e=0;e<2;e++)

{

if(a&&!

b)continue;

if(b&&c||!

b&&!

c)continue;

if(c&&!

d||!

c&&d)continue;

if(!

d&&!

e)continue;

if(e&&(!

a||!

d))continue;

printf("%d%d%d%d%d",a,b,c,d,e);

}

return0;

}

2、某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件:

1)A和B两人中至少去一人;

2)A和D不能一起去;

3)A、E和F三人中要派两人去;

4)B和C都去或都不去;

5)C和D两人中去一个;

6)若D不去,则E也不去。

试编写一个程序,输出问应当让哪几个人去?

#include

intmain()

{

inta,b,c,d,e,f;

for(a=1;a>=0;a--)

for(b=1;b>=0;b--)/*1:

去0:

不去*/

for(c=1;c>=0;c--)

for(d=1;d>=0;d--)

for(e=1;e>=0;e--)

for(f=1;f>=0;f--)

{

if(a+b>=1&&a+d!

=2&&a+e+f==2&&b==c&&c+d==1&&(d+e==0||d==1))

printf("a=%d,b=%d,c=%d,d=%d,e=%d,f=%d",a,b,c,d,e,f);

}

return0;

}

3、警察局抓住了A、B、C、D四名盗窃嫌疑犯,其中只有一人是小偷。

在审问时,A说:

“我不是小偷”;

B说:

“C是小偷”;C说:

“小偷肯定是D”;D说:

“C在冤枉好人”。

现在已经知道这四人中有三人说的是真话,一人说的是假话。

请问到底谁是小偷?

提示:

设4个变量a,b,c,d,为0时表示不是小偷,为1时表示是小偷,用四重循环穷举a,b,c,d可能的取值的组合,

对每一种组合判断其是否符合题目中给出的约束。

最后结论:

C是小偷。

#include

intmain()

{

inta,b,c,d;

for(a=1;a>=0;a--)

for(b=1;b>=0;b--)/*1:

是小偷0:

不是小偷*/

for(c=1;c>=0;c--)

for(d=1;d>=0;d--)

{

if((a==0)+(c==1)+(d==1)+(d==0)==3&&a+b+c+d==1)/*4人的说法中有3个真的,且只有一个小偷*/

printf("%d%d%d%d",a,d,c,d);

}

return0;

}

4、有限五位数

个位数为6且能被3整除的五位数有多少个?

#include

intmain()

{

longinti;

intsum=0;

for(i=1000;i<=9999;i++)

{

if((i*10+6)%3==0)

{

sum++;

}

}

printf("%d",sum);

return0;

}

5、标题:

错误票据

某涉密单位下发了某种票据,并要在年终全部收回。

每张票据有唯一的ID号。

全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。

因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。

你的任务是通过编程,找出断号的ID和重号的ID。

假设断号不可能发生在最大和最小号。

要求程序首先输入一个整数N(N<100)表示后面数据行数。

接着读入N行数据。

每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000)每个整数代表一个ID号。

要求程序输出1行,含两个整数mn,用空格分隔。

其中,m表示断号ID,n表示重号ID

例如:

用户输入:

2

56811910129

则程序输出:

79

再例如:

用户输入:

6

164178108109180155141159104182179118137184115124125129168196172189127107112192103131133169158

128102110148139157140195197

185152135106123173122136174191145116151143175120161134162190149138142146199126165156153193144166170121171132101

194187188113130176154177120117150114183186181100163160167147198111119

则程序输出:

105120

资源约定:

峰值内存消耗<64M

CPU消耗<1000ms

请严格按要求输出,不要画蛇添足地打印类似:

“请您输入...”的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:

main函数需要返回0

注意:

只使用ANSIC/ANSIC++标准,不要调用依赖于编译环境或操作系统的特殊函数。

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

#include

inta[100001];

intmain()

{

intn,t;

scanf("%d",&n);

intmin=100001;

intmax=0;

inti;

for(i=0;i<=n;)

{

t=getchar();

if(t>='0'&&t<='9')

{/*注意是字符!

*/

ungetc(t,stdin);/*ungetc是一个函数功能,把一个字符退回到输入流中

用法:

intungetc(charc,FILE*stream);

输入参数c要写入的字符,stream文件流指针输出参数字符c操作成功,EOF操作失败*/

scanf("%d",&t);

a[t]++;/*在读入时保存下id号的最大值与最小值,这样可以为后面判断那个id遗漏(即a[id]==0)哪个id重复(即a[id]==2)提供一个范围控制。

*/

if(t

{

min=t;

}

if(t>max)

{

max=t;

}

}

elseif(t=='\n')

{

i++;

}

}

for(i=min;i

{

if(a[i]==0)

{

printf("%d",i);

}

if(a[i]==2)

{

printf("%d\n",i);

}

}

return0;

}

6、

标题:

马虎的算式

小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。

有一次,老师出的题目是:

36x495=?

他却给抄成了:

396x45=?

但结果却很戏剧性,他的答案竟然是对的!

因为36*495=396*45=1782

类似这样的巧合情况可能还有很多,比如:

27*594=297*54

假设abcde代表1~9不同的5个数字(注意是各不相同的数字,且不含0)

能满足形如:

ab*cde=adb*ce这样的算式一共有多少种呢?

请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。

满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。

答案直接通过浏览器提交。

注意:

只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。

#include

intmain()

{

intn,m,i=0;

for(inta=1;a<10;a++)

{

for(intb=1;b<10;b++)

{

for(intc=1;c<10;c++)

{

for(intd=1;d<10;d++)

{

for(inte=1;e<10;e++)

{

n=(a*10+b)*(c*100+d*10+e);

m=(a*100+d*10+b)*(c*10+e);

if(n==m&&a!

=b&&a!

=c&&a!

=d&&a!

=e&&b!

=c&&b!

=d&&b!

=e&&c!

=d&&c!

=e&&d!

=e)

i++;

}

}

}

}

}

printf("%d",i);

return0;

}

7、

标题:

切面条

一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?

答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

/*切面条*/

#include

main()

{

inti,num=2;

printf("n次条数\n");

for(i=1;i<=10;i++)

{

num=num*2-1;

printf("%2d%8d\n",i,num);

}

getch();

return0;

}

8、

标题:

奇怪的分式

上小学的时候,小明经常自己发明新算法。

一次,老师出的题目是:

1/4乘以8/5

小明居然把分子拼接在一起,分母拼接在一起,答案是:

18/45(参见图1.png)

老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!

对于分子、分母都是1~9中的一位数的情况,还有哪些算式可以这样计算呢?

请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如:

4/1乘以5/8是满足要求的,这算做不同的算式。

但对于分子分母相同的情况,2/2乘以3/3这样的类型太多了,不在计数之列!

注意:

答案是个整数(考虑对称性,肯定是偶数)。

请通过浏览器提交。

不要书写多余的内容。

#include

intmain()

{

intsum=0;

for(inta=1;a<=9;a++)

{

for(intb=1;b<=9;b++)

{

for(intc=1;c<=9;c++)

{

for(intd=1;d<=9;d++)

{

if(a==b&&c==d)

continue;

intna=a*10+c,nb=b*10+d;

if(a*1.0/b*c*1.0/d>=na*1.0/nb-0.000001&&

a*1.0/b*c*1.0/d<=na*1.0/nb+0.000001)

{

printf("%d/%d*%d/%d=%d/%d\n",a,b,c,d,na,nb);

sum++;

}

}

}

}

}

printf("sum=%d",sum);

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1