高手帮我检查一下这个C语言问题~
题目:输入一个整数n(0<=n<9),请输出满足以下条件的n位正整数的个数:要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可...
题目:输入一个整数n(0<=n<9),请输出满足以下条件的n位正整数的个数:
要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可以被3*3整除,该整数前4位可以被4*4整除……。即该整数前k位都可被k平方整除。
请输出符合该条件的n位正整数的数量。
例如:n=1,则符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12,16,20,24,28,32,36,40,44,48,52, 56,60,64,68,72,76,80,84,88,92,96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2可以被1整除;前2为24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。
我编的是:
23 整数问题
成绩: 10 / 折扣: 0.8
输入一个整数n(0<=n<9),请输出满足以下条件的n位正整数的个数:
要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可以被3*3整除,该整数前4位可以被4*4整除……。即该整数前k位都可被k平方整除。
请输出符合该条件的n位正整数的数量。
例如:n=1,则符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12,16,20,24,28,32,36,40,44,48,52, 56,60,64,68,72,76,80,84,88,92,96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2可以被1整除;前2为24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。
23 整数问题
成绩: 10 / 折扣: 0.8
输入一个整数n(0<=n<9),请输出满足以下条件的n位正整数的个数:
要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可以被3*3整除,该整数前4位可以被4*4整除……。即该整数前k位都可被k平方整除。
请输出符合该条件的n位正整数的数量。
例如:n=1,则符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12,16,20,24,28,32,36,40,44,48,52, 56,60,64,68,72,76,80,84,88,92,96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2可以被1整除;前2为24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。
我编的是:
#include"stdio.h"
main()
{int p,q,i,j,k,n,a;
scanf("%d",&n);
p=1;
for(i=1;i<n;i++)
p=10*p;
q=p*10;
i=p;
j=1;
a=0;
l:for(k=i;i<q;i++)
{
m:k=k/10;
if(j<n)
{
if(k%((n-j)*(n-j))==0)
{j++;goto m;}
else
{i++;goto l;}
}
else
{
if(i%(n*n)==0)
{a++;i++;j=1;goto l;}
else
{i++;j=1;goto l;}
}
}
printf("%d",a);
}
可能有点乱,但是1和2结果都对3就不对了5好像结果是0,郁闷……哪位好心人帮我看一下,感激不尽,我是实在检查不出来了……谢谢啊!!
题目输了三遍……属于系统错误……不好意思…… 展开
要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可以被3*3整除,该整数前4位可以被4*4整除……。即该整数前k位都可被k平方整除。
请输出符合该条件的n位正整数的数量。
例如:n=1,则符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12,16,20,24,28,32,36,40,44,48,52, 56,60,64,68,72,76,80,84,88,92,96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2可以被1整除;前2为24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。
我编的是:
23 整数问题
成绩: 10 / 折扣: 0.8
输入一个整数n(0<=n<9),请输出满足以下条件的n位正整数的个数:
要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可以被3*3整除,该整数前4位可以被4*4整除……。即该整数前k位都可被k平方整除。
请输出符合该条件的n位正整数的数量。
例如:n=1,则符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12,16,20,24,28,32,36,40,44,48,52, 56,60,64,68,72,76,80,84,88,92,96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2可以被1整除;前2为24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。
23 整数问题
成绩: 10 / 折扣: 0.8
输入一个整数n(0<=n<9),请输出满足以下条件的n位正整数的个数:
要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可以被3*3整除,该整数前4位可以被4*4整除……。即该整数前k位都可被k平方整除。
请输出符合该条件的n位正整数的数量。
例如:n=1,则符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12,16,20,24,28,32,36,40,44,48,52, 56,60,64,68,72,76,80,84,88,92,96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2可以被1整除;前2为24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。
我编的是:
#include"stdio.h"
main()
{int p,q,i,j,k,n,a;
scanf("%d",&n);
p=1;
for(i=1;i<n;i++)
p=10*p;
q=p*10;
i=p;
j=1;
a=0;
l:for(k=i;i<q;i++)
{
m:k=k/10;
if(j<n)
{
if(k%((n-j)*(n-j))==0)
{j++;goto m;}
else
{i++;goto l;}
}
else
{
if(i%(n*n)==0)
{a++;i++;j=1;goto l;}
else
{i++;j=1;goto l;}
}
}
printf("%d",a);
}
可能有点乱,但是1和2结果都对3就不对了5好像结果是0,郁闷……哪位好心人帮我看一下,感激不尽,我是实在检查不出来了……谢谢啊!!
题目输了三遍……属于系统错误……不好意思…… 展开
3个回答
展开全部
代码冗余的厉害,结构很不清晰,记得写程序的时候就要养成良好习惯
#include"stdio.h"
main()
{
int p,q,i,j,k,n,a;
scanf("%d",&n);
p=1;
for(i=1;i<n;i++)
p=10*p;
q=p*10;
i=p;
j=1;
a=0;
while(i < q)
{
k=k/10;
if(j<n)
{
if(k%((n-j)*(n-j))==0)
{
j++;
continue;
}
else
{
i++;
k = i;
continue;
}
}
else
{
if(i%(n*n)==0)
a++;
i++;
j=1;
k = i;
}
}
printf("%d",a);
return 0;
}
#include"stdio.h"
main()
{
int p,q,i,j,k,n,a;
scanf("%d",&n);
p=1;
for(i=1;i<n;i++)
p=10*p;
q=p*10;
i=p;
j=1;
a=0;
while(i < q)
{
k=k/10;
if(j<n)
{
if(k%((n-j)*(n-j))==0)
{
j++;
continue;
}
else
{
i++;
k = i;
continue;
}
}
else
{
if(i%(n*n)==0)
a++;
i++;
j=1;
k = i;
}
}
printf("%d",a);
return 0;
}
展开全部
题目不是很难,用GOTO不是一个好习惯。你的程序我看起来颇费力气,而且感觉如你所说的很乱。相对结果而言我认为提高代码可读性更为迫切,以下是我自己的版本
#include<stdio.h>
void main()
{
int max=1,min,n;
scanf("%d",&n);
int i;
for(i=1;i<=n;i++)
max*=10;
min = max/10;
max-=1;
for(int j=min;j<=max;j++)
{
int temp = j;
int flag = 1;
for(int i=n;i>0;i--)
{
if((temp%(i*i))!=0)
{
flag = 0;
break;
}
temp/=10;
}
if(flag==1)
printf("%d ",j);
flag = 1;
}
scanf("%d",&n);
}
#include<stdio.h>
void main()
{
int max=1,min,n;
scanf("%d",&n);
int i;
for(i=1;i<=n;i++)
max*=10;
min = max/10;
max-=1;
for(int j=min;j<=max;j++)
{
int temp = j;
int flag = 1;
for(int i=n;i>0;i--)
{
if((temp%(i*i))!=0)
{
flag = 0;
break;
}
temp/=10;
}
if(flag==1)
printf("%d ",j);
flag = 1;
}
scanf("%d",&n);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
GOTO少用啊~我一见GOTO就失去兴趣了,GOTO会破坏程序模块,结构性紊乱,以后还是按部就班吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询