10年江苏省计算机二级(春)一道C语言编程题,找不出自己哪里编错了

题目是:
【程序功能】
在给定范围内查找k使得用公式k^2+k+17生成的整数满足以下条件:该数的十进制表示中低3位数字相同,去掉低3位后的整数是回文数。例如,当k=461时用公式生成的整数 是212999,该数满足所给条件。
【编程要求】
1.编写函数int findnum(int n1,int n2,long a[][2])实现以下功能:k依次取n1~n2范围
内的每个整数,分别用每个k及公式k2+k+17生成整数y,若y满足给定条件,则将k值及y值保存到a指向的数组中,函数返回a数组中k的个数。
2.编写函数main实现以下功能:声明二维数组a和变量n1、n2,输入两个整数并保存到n1、n2中,用n1、n2及a数组作实参调用findnum函数,按所给格式输出a数组中的数据到屏幕及文件myf2.out中。最后将考生本人的准考证号输出到文件myf2.out中。
【测试数据与运行结果】
输入:
n1=1,n2=10000
输出:
k number
461 212999
586 343999
3839 14741777

我写的程序是:
#include "stdafx.h"
#include <stdio.h>
int findnum(int n1,int n2,long a[][2]);
int huiwen(int n);
void main()
{ int n1,n2,i,num;long a[20][2];
printf("Input n1 and n2:");
scanf("%d%d",&n1,&n2);
num=findnum(n1,n2,a);
printf(" k number\n");
printf("num=%d\n",num);
for(i=0;i<num;i++)
printf("%d%10d",a[i][0],a[i][1]);

}
int findnum(int n1,int n2,long a[][2])
{ int k,y,i=0;
for(k=n1;k<=n2;k++)
{ y=k*k+k+17;
if(y<100000) break;
else if (y%1000/100==y%100/10&&y%100/10==y%10&&huiwen(y/1000))
{ a[i][0]=k; a[i][1]=y;i++;}
}
return(i);
}

int huiwen(int n)
{ int sum=0;
while(n)
{ sum=sum*10+n%10;
n=n/10;
}
if(sum==n)
return(1);
else return(0);
}

运行结果如图

没有办法成功输出这个数组,因为num的值始终是0。
我不知道自己的findnum函数哪里写的有问题,求大神指点……TwT

首先你的输入格式与要求不符!
其次
else if (y%1000/100==y%100/10&&y%100/10==y%10&&huiwen(y/1000))
{ a[i][0]=k; a[i][1]=y;i++;}
这段代码有问题吧,什么意思?追问

输入格式这个是没有按照要求- -|| 想先看看能不能运行出来所以没管细节
这段代码我想表达的是:如果整数y的最后三位数相等并且去掉这最后三位数后整数y是回文数,那么把满足要求的k和y值存放到a数组中

追答

回文判断程序写错了

优化后的完整代码
int findnum(int n1,int n2,long a[][2])
{
int k,y,i=0;
for(k=n1;k<=n2;k++)
{
y=k*k+k+17;
if ((y%1000)%111==0 && huiwen(y/1000) )
{
a[i][0]=k;
a[i][1]=y;
i++;
}
}
return(i);
}
int huiwen(int n)
{
int sum=0,nn=n;//定义一个nn记录原n
while(n)
{
sum=sum*10+n%10;
n=n/10; //这里n变化了
}
if(sum==nn) //与原值比较
return(1);
else
return(0);
}
void main()
{
int n1,n2,i,num;
long a[20][2];

printf("Input n1 and n2:");
scanf("%d%d",&n1,&n2);

num=findnum(n1,n2,a);
printf("  k    number\n");
for(i=0;i<num;i++)
printf("%d%10d\n",a[i][0],a[i][1]);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-24
没深入看,你的huiwen(int n)函数,sum不会等于n的,返回值一直是0,是不是这里错了追问

是的!写错了QAQ 应该再加个中间量temp把n赋给temp的

相似回答