printf("%4d",m[j][i]);
}
printf("\n");
}
return0;
}
8.2兔子生崽问题(4分)
题目内容:
假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,n(n<=12)月以后可有多少对兔子(即当年第n月份总计有多少对兔子,含成兔和小兔)?
请编程求解该问题,n的值要求从键盘输入。
参考答案:
依题意,兔子的繁殖情况如图所示。
图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。
观察分析此图可发现如下规律:
(1)每月小兔对数=上个月成兔对数。
(2)每月成兔对数=上个月成兔对数+上个月小兔对数。
综合
(1)和
(2)有:
每月成兔对数=前两个月成兔对数之和。
用fn(n=1,2,…)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式:
#include
intmain(){
printf("Inputn(n<=12):
\n");
intn,total=0,i,s=0,b=1,t;
scanf("%d",&n);
printf("%4d",1);
for(i=2;i<=n;i++){
t=s;
s=b;
b=b+t;
printf("%4d",s+b);
}
printf("\nTotal=%d\n",s+b);
return0;
}
8.3
抓交通肇事犯(4分)
题目内容:
一辆卡车违犯交通规则,撞人后逃跑。
现场有三人目击事件,但都没记住车号,只记下车号的一些特征。
甲说:
牌照的前两位数字是相同的;乙说:
牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:
四位的车号刚好是一个整数的平方。
现在请根据以上线索帮助警方找出车号以便尽快破案。
[提示]:
假设这个4位数的前两位数字都是i,后两位数字都是j,则这个可能的4位数
k=1000*i+100*i+10*j+j
式中,i和j都在0~9变化。
此外,还应使k=m*m,m是整数。
由于k是一个4位数,所以m值不可能小于31。
输入格式:
无
输出格式:
"k=%d,m=%d\n"
注意:
为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include
intmain(){
inti,j,k,m,tk,tm;
for(i=0;i<=9;i++){
for(j=0;j<=9;j++){
for(m=31;m<100;m++){
k=1000*i+100*i+10*j+j;
if(i!
=j&&m*m==k){
tm=m;
tk=k;
break;
}
}
}
}
printf("k=%d,m=%d\n",tk,tm);
return0;
}
8.4
检验并打印幻方矩阵。
(4分)
题目内容:
幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。
从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。
输入格式:
"%d"
输出格式:
如果是幻方矩阵,输出提示信息:
"Itisamagicsquare!
\n"
矩阵元素的输出:
"%4d"(换行使用"\n")
如果不是幻方矩阵,输出提示信息:
"Itisnotamagicsquare!
\n"
输入样例1:
17_24_1_8_15
23_5_7_14_16
4_6_13_20_22
10_12_19_21_3
11_18_25_2_9
(输人样例中“_”代表空格)
输出样例1:
Itisamagicsquare!
**17**24***1**8**15
**23***5***7**14**16
***4***6**13**20**22
**10**12**19**21***3
**11**18**25***2***9
(输出样例中“*”代表空格)
输入样例2:
1_0_1_6_1
3_1_1_1_1
1_1_1_1_2
1_1_1_1_1
9_1_7_1_1
(输人样例中“_”代表空格)
输出样例2:
Itisnotamagicsquare!
注意:
为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(输人样例中“_”代表空格,输出样例中“*”代表空格)
#include
intmain()
{
inta[5][5],i,j,t,row[5]={0},col[5]={0},dl1=0,dl2=0,flag=1;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
row[i]+=a[i][j];
}
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
col[i]+=a[j][i];
}
}
for(i=0;i<5;i++){
dl1+=a[i][i];
dl2+=a[4-i][4-i];
}
for(i=0;i<4;i++){
if(col[i]!
=col[i+1]){
flag=0;
break;
}
if(row[i]!
=row[i+1]){
flag=0;
break;
}
}
if(col[1]!
=row[1]){
flag=0;
}
if(dl1!
=dl2){
flag=0;
}
if(dl1!
=col[1]){
flag=0;
}
if(flag){
printf("Itisamagicsquare!
\n");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%4d",a[i][j]);
}
printf("\n");
}
}
else{
printf("Itisnotamagicsquare!
\n");
}
return0;
}
9.1
重复数字检查(4分)
题目内容:
从键盘输入一个数,检查这个数中是否有重复出现的数字。
如果这个数中有重复出现的数字,则显示“Repeateddigit!
”;否则显示“Norepeateddigit!
”。
已知函数原型:
intCountRepeatNum(intcount[],intn);
若有重复数字,则该函数返回重复出现的数字;否则返回-1.
程序运行结果示例1:
Inputn:
28212↙
Repeateddigit!
程序运行结果示例2:
Inputn:
12345↙
Norepeateddigit!
输入提示:
"Inputn:
\n"
输入格式:
"%ld"
输出格式:
有重复数字,输出信息:
"Repeateddigit!
\n"
没有重复数字,输出信息:
"Norepeateddigit!
\n"
注意:
为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include
intmain()
{
intlog[10]={0},a[100];
intb,i=0,n,c,d;
printf("Inputn:
\n");
scanf("%d",&n);
while(n!
=0)
{
b=n%10;
n/=10;
a[i]=b;
i++;
}
a[i]=n;
intflag=0;
for(c=0;c
for(d=c+1;d
{
if(a[c]==a[d])
{
flag=1;
break;
}
}
//if(a[0]==a[i-1]||a[0]==a[1])flag=1;
if(flag)printf("Repeateddigit!
\n");
elseprintf("Norepeateddigit!
\n");
}
9.2
教授的课(4分)
题目内容:
教授正在为一个有N个学生的班级讲授离散数学课。
他对某些学生缺乏纪律性很不满意,于是决定:
如果课程开始后上课的人数小于K,就取消这门课程。
从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。
如果该门课程被取消,则输出“Yes”,否则输出“No”。
假设教授在时刻0开始上课。
如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。
如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。
如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。
假设到达时间的绝对值不超过100,学生数N不超过1000。
要求在输入学生的到达时间之前,先输入N和K。
已知函数原型:
//函数功能:
根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0
intIsCancel(inta[],intn,intk);
程序运行结果示例1:
Inputn,k:
4,3↙
-1-342↙
YES
程序运行结果示例2:
Inputn,k:
5,3↙
-1-2-304↙
NO
输入提示:
"Inputn,k:
\n"
输入格式:
"%d,%d"
"%d"
输入包括两行数据:
第1行是n,k的值。
第2行是学生的到达时间。
输出格式:
课程被取消,输出"YES"
课程不取消,输出"NO"
注意:
为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include