algorithm test

输入一个四位数,改变其中一位,使其变为一个数的平方

#include<stdio.h>
#include<math.h>
int check(int n);


int main(void)
{
int i,line;
int num[1000];
int result[1000]; 

printf("enter number (1<=num<=1000)\n");
scanf("%d", &line);
printf("enter %d number (1000<=num<=9999)\n",line);
for (i = 0; i < line; i++)  //输入line个整数
{
int n;
scanf("%d", &n);  
num[i] = n;
}
for ( i = 0; i < line; ++i)  
result[i]=check(num[i]);
for(i=0;i<line;i++)
printf("case %d :%d\n",i+1,result[i] );


}


int check(int n)
{
int count1=0,temp,time,q,b,s,g;
q=n/1000;
b=(n-q*1000)/100;
s=(n-(q*1000+b*100))/10;
g = (n - (q * 1000 + b * 100 + s * 10));

for(temp=n,time=0;time<9-q;temp+1000,time++)//改变千位数,往上加
{
float t = (sqrt(temp));
if (t - (int)t == 0)
count1++;
temp = (temp+1000);
}
for(temp=n,time=0;time<q-1;time++)//改变千位数,往下减
{
float t= (sqrt(temp));
if(t-(int)t==0)
count1++;
temp=(temp - 1000);
}

for(temp=n,time=0;time<9-b;time++)//改变百位数,往上加
{
if(sqrt(temp)==(int)sqrt(temp))
count1++;
temp = temp + 100;
}
for(temp=n,time=0;time<b;time++)//改变百位数,往下减
{
if (sqrt(temp) == (int)sqrt(temp))
count1++;
temp = temp-100;
}
for (temp=n,time=0;time<9-s; time++)//改变十位,往上加
{
if(sqrt(temp)==(int)sqrt(temp))
count1++;
temp = temp + 10;
}
for (temp=n,time=0;time<s;  time++)//改变十位,往下减
{
if(sqrt(temp)==(int)sqrt(temp))
count1++;
temp = temp -10;


}
for (temp=n,time=0;time<9-g;temp++,time++)//改变个位,往上加
{
if(sqrt(temp)==(int)sqrt(temp))
count1++;
}
for (temp=n,time=0;time<g; temp--,time++)//改变个位,往下减
{
if(sqrt(temp)==(int)sqrt(temp))
count1++;
}


return count1;
}

猜你喜欢

转载自blog.csdn.net/weixin_40804971/article/details/78444382