北理工C语言编程网上作业答案文档格式.docx
《北理工C语言编程网上作业答案文档格式.docx》由会员分享,可在线阅读,更多相关《北理工C语言编程网上作业答案文档格式.docx(33页珍藏版)》请在冰点文库上搜索。
这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。
譬如12和5,在十进制下它们是不等的,但假设12使用3进制而5使用六进制或十进制时,它们的值就是相等的。
因此只要选择适宜的进制,12和5就可以是相等的。
程序的输入是两个数字M和N(其十进制的值不超过1000000000),它们的进制在2~36之间。
对于十以下的数字,用0~9表示,而十以上的数字,那么使用大写的A~Z表示。
求出分别在2~36哪种进制下M和N相等。
假设相等那么输出相应的进制,假设不等那么输出错误信息。
当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。
信息的格式见测试用例。
21.零钱换整钱
小明手中有一堆硬币,小红手中有假设干张10元的整钱。
1角的硬币厚度为1.8mm,5角的硬币厚1.5mm,1元的硬币为2.0mm。
小明和小红一起玩游戏,小红拿出假设干张10元的纸币,小明要将1角的硬币放成一摞,将5角的硬币硬币放成一摞,将1元的硬币放成一摞,如果3摞硬币一样高,并且金额能够正好小红要求的面值,那么双方可以进行交换,否那么没有方法交换。
输入:
小红希望交换几张10元的纸币
输出:
1角的数量,5角的数量,1元的数量
4.intn,a,b,c,s,j=0;
5.scanf("
%d"
n);
6.for(a=1;
a<
10*n;
a++)
7.for(b=1;
b*15<
=a*18;
b++)
8.for(c=1;
c<
a;
c++)
9.{
10.s=a+b*5+c*10;
11.if(b*15==c*20&
&
a*18==b*15&
s==100*n)
12.{printf("
%d,%d,%d\n"
a,b,c);
13.j+=1;
14.}
15.}
16.if(j==0)
17.printf("
Nochange.\n"
);
18.return0;
19.}
22.买东西
某商品有A、B、C三种品牌,各品牌的价格各不相同,其中A品牌的价格为每个5元,B品牌为每个3元,而C品牌为每3个1元。
如果要用M元钱买N个该商品,要求每个商品至少买一个,编程求各种品牌各能买多少个。
先后输入M〔钱数〕及N〔商品个数〕的实际数值
所有可能情况下可以购置的3种商品的个数,按A、B、C品牌的顺序输出,用逗号分隔。
例如:
2,30,68;
表示A品牌商品2个、B品牌商品30个、C品牌商品68个。
要求:
因为有多个结果,结果的排序按照A品牌的个数从少到多的顺序输出。
4.inta,b,c,M,N,s;
%d%d"
M,&
N);
=N;
7.{
8.for(b=1;
b<
10.c=N-a-b;
11.if(c%3==0)
12.{
13.s=a*5+b*3+c/3;
14.if(s==M)
15.printf("
%d%d%d\n"
16.}
17.}
18.}
19.}
23谁能出线
背景:
电视台举办“超级学生〞才艺大赛,由于报名人数狂多,所以要先进行分组预赛。
按规定,每10名学生为一个预赛小组,评委打出分数〔0~100分〕,各小组第一名可以进入下一轮;
如果有多名学生得分相同都是第一名,那么可同时进入下一轮。
按顺序给出一个小组10个人的最后得分〔int〕。
能够出线的学生序号〔0~9〕。
#include<
main()
{inta[10]={0},i,max=0;
for(i=0;
i<
10;
i++)
{
scanf("
a[i]);
if(max<
a[i])max=a[i];
}
for(i=0;
{if(a[i]==max)
printf("
i);
}
}
24.寻找特殊偶数
有一种特殊偶数,它每一位上的数字都两两不相同。
我们现在需要找出四位数中某一区间内的这类偶数。
所要寻找的四位偶数的范围。
每组输入有两个数字:
第一个数字是最小范围;
第二个数字是最大范围。
如果输入遇到0,输入结束。
列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。
4.inta,b,counter,i,number1,number2,number3,number4;
5.do
6.{
7.scanf("
b);
8.if((a==0)&
(b==0))
9.break;
10.if(a>
=b)printf("
Error\n"
11.else
13.if((a<
1000)||(b<
1000))printf("
14.else
15.{
16.for(i=a,counter=0;
=b;
i++)
17.{
18.number1=i/1000;
19.number2=i/100%10;
20.number3=i/10%10;
21.number4=i%10;
22.if((number1!
=number2)&
(number1!
=number3)&
=number4)&
(number2!
(number3!
=number4))
23.{
24.if((i%2)==0)
25.{
26.printf("
%d"
27.counter++;
28.}
29.}
30.}
31.printf("
\n"
32.printf("
counter=%d\n"
counter);
33.}
34.}
35.}
36.while((a!
=0)&
(b!
=0));
37.return;
38.}
26二年级小学生的题目
两个二年级小朋友在一起玩游戏,小明给出一堆不超过两位的正整数和运算要求〔+、-、*、/、%〕,小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。
用逗号分隔的不超过两位的正整数序列,及其运算符和等号
最大数op最小数=结果
2.intmain()
4.intop=0;
5.intmax=0;
6.intmin=99;
7.intmark=0;
8.intn1=-1,n2=-1,n=0;
9.for(;
1;
)
10.{
11.charc;
12.scanf("
%c"
13.if(c=='
'
14.{
15.if(mark==1)
16.n=n1;
17.elseif(mark==2)
18.n=n1*10+n2;
19.if(n>
max)
20.{max=n;
}
21.if(n<
min)
22.{min=n;
23.mark=0;
24.n1=-1,n2=-1;
25.continue;
26.}
27.if(c=='
+'
28.op=1;
29.elseif(c=='
-'
30.op=2;
31.elseif(c=='
*'
32.op=3;
33.elseif(c=='
/'
34.op=4;
35.elseif(c=='
%'
36.op=5;
37.elseif(c=='
='
38.{break;
39.elseif(c<
9'
c>
0'
40.{
41.if(mark==0)
42.{n1=c-'
;
mark=1;
43.elseif(mark==1)
44.{n2=c-'
mark=2;
45.
46.}
47.}
48.switch(op)
49.{
50.case1:
51.{
52.printf("
%d+%d=%d\n"
max,min,max+min);
53.break;
54.}
55.case2:
56.{
57.printf("
%d-%d=%d\n"
max,min,max-min);
58.break;
59.}
60.case3:
61.{
62.printf("
%d*%d=%d\n"
max,min,max*min);
63.break;
64.}
65.case4:
66.{
67.if(min==0)
68.printf("
Error!
69.else
70.{
71.printf("
%d/%d=%d\n"
max,min,max/min);
72.}
73.break;
74.}
75.case5:
76.{
77.if(min==0)
78.printf("
79.else
80.{
81.printf("
%d%%%d=%d\n"
max,min,max%min);
82.}
83.break;
84.}
85.}
86.}
27等值数列段
如果一个数列中的某一段〔至少有两个元素〕的各元素值均相同,那么称之为等值数列段。
等值数列段中元素的个数叫做等值数列段的长度。
由N个元素组成的整数数列A〔其中N<
=50)
A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,那么输出Noequalnumberlist.
说明:
始末位置是指数组下标,即0表示第一个元素。
如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。
当在一个LIST中出现两个等长的连续串的时候,我们的答案应该是第一个等长串。
1.#include<
4.
5.for(;
7.intnum[50]={0};
8.intn=0;
9.
10.scanf("
11.for(inti=0;
n;
12.{scanf("
num[i]);
13.intstarttemp=num[0];
14.intstart=num[0];
15.inta=-1;
16.intb=0;
17.intcount=1;
18.intcounttemp=1;
19.
20.for(inti=1;
21.{
22.if(num[i]==num[i-1])
24.a=i;
25.counttemp++;
26.if(counttemp>
count)
27.{b=a;
count=counttemp;
28.continue;
30.else
31.{
32.counttemp=1;
34.
36.if(a==-1)
37.{printf("
Noequalnumberlist.\n"
break;
38.else
39.{printf("
Thelongestequalnumberlistisfrom%dto%d.\n"
b+1-count,b);
break;
40.}
41.}
28大家一起做游戏
幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。
规那么如下:
所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,但凡报到固定数字〔例如5〕的,都退出该游戏,直到只剩下一位小朋友游戏才中止。
每个小朋友都希望自己能有更多的练习数数的时机,所以都希望成为最终被留下的那位。
现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。
小朋友的个数〔<
=50〕要被练习的数字
最终被留下的小朋友的序号
如“要被练习的数字〞是5,那么每次数到5的同学要退出该游戏
2.voidmain()
4.intN,n,i,s=0,a;
%d%d\n"
N,&
6.for(i=2;
7.s=(s+n)%i;
8.a=s+1;
9.printf("
TheleftchildisNO%d.\n"
a);
10.}
29组成最大数
任意输入一个自然数,输出该自然数的各位数字组成的最大数。
例如,输入1593,那么输出为9531。
自然数n
各位数字组成的最大数
2.#include<
string.h>
3.intmain()
4.{
5.chara[100000],c;
6.inti,j,k;
%s"
a);
8.i=strlen(a);
9.for(j=0;
j<
i-1;
j++)
10.for(k=0;
k<
i-j-1;
k++)
11.{
12.if(a[k]<
a[k+1])
13.{
14.c=a[k];
15.a[k]=a[k+1];
16.a[k+1]=c;
19.printf("
20.printf("
21.}
30删除重复字符
输入一个长度不超过100的字符串,删除串中的重复字符。
输入要检查的字符串,长度不超过100个字符。
abacaeedabcdcd。
删除重复字符后的字符串。
abced。
2.
3.#include<
5.intalread_saved(charlastchar,charnewstr[],intj)
6.
8.
9.inti=0;
10.
11.while(i<
j)
12.
14.if(lastchar==newstr[i])return1;
15.
16.i++;
17.
20.return0;
21.
22.}
23.
24.voidmain()
25.
26.{
27.charstr[100];
charnewstr[100];
intn,i,j;
28.
29.i=0;
30.
31.j=0;
32.
33.gets(str);
35.while(str[i]!
\0'
36.
37.{
38.
39.if(!
alread_saved(str[i],newstr,j))
40.{newstr[j]=str[i];
j++;
41.
42.}
43.i++;
44.
45.}
46.
47.newstr[j]='
48.
49.puts(newstr);
50.
51.}
31合并字符串
输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。
两个已经排好顺序〔升序〕的两个字符串
一个合并在一起的有序〔升序〕的字符串
设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,那么效率太低了。
5.voidMergeList(charstr1[],charstr2[],charstr3[]);
7.voidmain()
10.charstr1[100];
charstr2[100];
charstr3[100];
gets(str1);
gets(str2);
11.
12.MergeList(str1,str2,str3);
13.
14.printf("
%s\n"
str3);
18.voidMergeList(charstr1[],charstr2[],charstr3[])
20.{
22.inti,j,k;
24.i=0;
j=0;
k=0;
25.intlengthOfStr1,lengthOfStr2;
lengthOfStr1=strlen(str1);
lengthOfStr2=strlen(str2);
26.while(i<
lengthOfStr1&
lengthOfStr2)
27.
28.{
29.if(str1[i]<
=str2[j])str3[k++]=str1[i++];
elsestr3[k++]=str2[j++];
31.}
32.while(i<
lengthOfStr1)str3[k++]=str1[i++];
while(j<
lengthOfStr2)str3[k++]=str2[j++];
str3[k]='
33.
32串的减法
输入字符串s和t〔串长不超过80个字符〕,将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。
当s="
112345"
,t="
2467"
时,u="
1135"
。
第一行为串s
第二行为串t
串u
2.#include<
5.chara[80];
6.charb[80];
7.gets(a);
8.gets(b);
10.intl=strlen(a);
12.for(inti=0;
b[i]!
14.for(intj=0;
l;
15.if(a[j]==b[i])
16.a[j]='
18.for(intk=0;
19.if(a[k]!
a[k]);
21.printf("
22.
23.}
33单词排序
输入5个单词,将它们按从大到小的顺序排列后输出。
5个单词
排序后的顺序
1.#include"
stdio.h"
2.#include"
string.h"
3.voidmain()
4.{charch[5][26],c[26];
5.inti,j,k;
6.for(i=0;
5;
7.gets(ch[i]);
8.for(i=0;
4;
9.{k=i;
10.for(j=i+1;
11.if(strcmp(ch[k],ch[j])<
0)k=j;
12.if(k!
=i)
13.{strcpy(c,ch[i]);
14.strcpy(ch[i],ch[k]);
15.strcpy(ch[k],c);
16.