[6.06]回文数
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main()
{
int a,b,c,d,flag;
c = 0;
scanf("%d",&a);
d = a;
while(d>0)
{
b=d%10;
d/=10;
c=c*10+b;
if (d==c)
{
printf("Yes");
flag = 1;
break;
}
else
{
if (a<10)
{
printf("Yes");
flag = 1;
break;
}
else
{
flag = 0;
}
}
}
if (flag == 0)
{
printf("No");
}
return 0;
}
该程序能输出大部分回文数,但是有特殊情况,暂未查出。
改正:第15行 if 中的d改为a。更多原因有待探索。
[6.14]逆序打印正整数
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,a,b;
scanf("%d",&a);
for (i=1;i<=a;i++)
{
b = a%10;
a = a/10;
if (b==0)
{
printf("%d",a);
break;
}
else
{
printf("%d ",b);
}
}
return 0;
}
无法输出最高位。如“123”,只能输出“3 2 ”
[6.49]高次方的尾数
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int m,n,a,i,b;
b = 1;
scanf("%d %d",&m,&n);
a = pow(m,n);
if (a<=999)
{
printf("The last 3 digits of %d ** %d is:%03d",m,n,a);
}
else
{
for (i=1;i<=n;i++)
{
if (b>=1000)
{
b = b%1000;
}
b = b*m;
}
printf("The last 3 digits of %d ** %d is:%03d",m,n,b);
}
return 0;
}
欲实现不用范围更大的关键词进行高次方运算,但是失败在下方if循环。佛了。
修改成功!!!
分析:因为存在a的判断的step,如果是很大的数,则超出范围,连a符不符合条件也判断不出来,所以下面的的程序难以运行成功。解决方法就是不搞a,小的和大的一起考虑。
8.22 寻找重复数字【★★】
网络原因,错误代码段未保存。错因为使用重复判断时具有“短时记忆”的特点,即只能记住上次保存下标所对应的值,导致如“2 2 0 1 5 2 2 6"这样的数字会输出两个2。
8.28 第二价格竞拍【★★】
#include <stdio.h>
#include <stdlib.h>
int main()
{
int T,N,i,j,k,index,cost[100],max,maxx;
scanf("%d",&T);
for (i=0;i<T;i++)
{
max = 0;
maxx = 0;
scanf("%d",&N); //人数
for (j=0;j<N;j++)
{
scanf("%d",&cost[j]); //各个价格
if (max <= cost[j])
{
max = cost[j];
index = j;
}
for (k=0;k<N;k++)
{
if (cost[k]<max && maxx<cost[k])
{
maxx = cost[k];
}
}
}
printf("%d %d\n",index+1,maxx);
}
return 0;
}
一直找不出隐藏情况。
经修改发现,22-28行的代码脱离J循环后成功,即先把最大值确定后再比较。具体原因仍需研究,毕竟错误代码未遭遇失败情况。
10.12 单词统计【★】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i=0,count=0;
char v[2000];
while(1)
{
scanf("%c",&v[i]);
if (v[i]==' '||v[i]=='\n')
{
count++;
}
if ((v[i-4]==' '||v[i-4]=='\n')&&v[i-3]=='s'&&v[i-2]=='t'&&v[i-1]=='o'&&v[i]=='p')
{
break;
}
i++;
if (v[0]=='s'&&v[1]=='t'&&v[2]=='o'&&v[3]=='p')
{
break;
}
}
printf("%d",count);
return 0;
}
始终存在失败的隐藏情况。
10.6 Your Ride Is Here【★★】
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[7],b[7];
int i,x=1,y=1;
for (i=0;i<6;i++)
{
scanf("%c",&a[i]);
x = x*(a[i]-64);
}
getchar(); //重要!!!scanf的留下的回车符
for (i=0;i<6;i++)
{
scanf("%c",&b[i]);
y = y*(b[i]-64);
}
if (x%47==y%47)
{
printf("GO");
}
else
{
printf("STAY");
}
return 0;
}
使用单个字符输入存在隐藏情况,但是换成不用循环的%s输入却可以成功。
【★★】10.5 列优先存放
char Fun (char w[M+5][N+5],int m,int n,char *a)
{
int i,j,k=0;
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
a[k] = w[j][i];
k++;
}
}
return 1;
}
该代码段为正确答案,但不明白形参为什么是w[M+5][N+5],其中参数一变就造成失败结果。