天气: 天黑了
心情: 小压抑
本节内容我们稍微进阶一下
,利用循环求解一些特殊的问题。
1、有这样一个等式,xyz+yzz=532,编程求x,y,z的值。
没有技术要点,采用穷举法,当然这里面有一个可优化的条件:就是4=<X+Y<=5
可以利用其来优化程序,但是这里面求的是一个常数,如果换一个数据呢,所以我们
可以把最高位当作一个优化因子,在进行大规模的数据计算时,可以节约大量的时间。
对这个三位数,我们可以考虑四种情况,分别是十位和个位的进位与否;基于不
同的情况 列三个等式然后求解即可。但是等式的求解还是比较麻烦的,虽然用穷举法
会显得自己比较笨,但是也不失为一种好办法。
void main()
{
int num ;
printf("please input n:\n");
scanf("%d",&num);
int x,y,z,i=0;
int a=num%10;
int b=(num/10)%10;
int c=num/100;
int flag=1;
while(i<4)
{
switch(i)
{
case 0: //个位、十位均无进位
z=a/2;
y=b-z;
x=c-y;
break;
case 1: //个位有进位
z=(a+10)/2;
y=b-z-1;
x=c-y;
break;
case 2: //十位有进位
z=a/2;
y=b-z+10;
x=c-y-1;
break;
case 3: //十位、个位均有进位
z=(a+10)/2;
y=b+10-z-1;
x=c-y-1;
break;
default:break;
}
i++;
if(x>0&&y>0&&z>=0)
{
printf("x=%d,y=%d,z=%d",x,y,z);
flag=0;
}
}
if(flag)
printf("No resault!\n");
}
这样写只是运行的快,但是你也发现了:好长啊!!!
2、一元钱兑换方案
为了说明上述方法与穷举法的差别,下面用一句简洁的代码完成一元钱的兑换方案
void main()
{
int i,j,k;
for(i=0;i<=10;i++)
for(j=0;j<=5;j++)
for(k=0;k<=2;k++)
if(i+j*2+k*5==10)
printf("yijiao %d ,liangjiao %d ,wujiao %d \n",i,j,k);
}
3、对调数问题
举个例子吧 56+21=65+12
我们的任务就是当给出一个对调数时,求出满足条件的另一个对调数。
void main()
{
int x,y,z,x1,y1,z1,i,k,n,j=0;
while(1)
{
printf("please input a integer\n");
scanf("%d",&n);
if(n<=10||n>=100)
{
printf("data error\n");
continue;
}
else if (n%10==0)
{
printf("data error\n");
continue;
}
else if(n%10==n/10)
{
printf("data error\n");
continue;
}
else
{
x=n/10;
y=n%10;
z=10*y+x;
break;
}
}
for(i=11;i<100;i++)
{
if(i%10==0)
continue;
else
{
x1=i/10;
y1=i%10;
z1=y1*10+x1;
if(n+i==z+z1&&n!=z1)
{
printf("%d+%d=%d+%d\n",n,i,z,z1);
j++;
}
else
continue;
}
}
if(j==0)
printf("inexistince\n");
}
4、求解平方和问题,这是今天的最后一个题目,而且也是很有意思的一个题目:
任意给出一个自然数K(k!=0),计算其各位数字的平方和k1,在计算k1各位数字的
平方和k2,重复此过程,最终将得到数1或145,此时在做数的平方和运算它最终结果将始终是1或145.
void main()
{
long a[10],n,i;
p:
printf("please input a number:\n");
scanf("%d",&n);
if(n==0)
goto p;
while(n!=1&&n!=145)
{
printf("n=%ld->",n);
i=1;
while(n>0)
{
a[i++]=n%10;
n/=10;
}
n=0;
i--;
while(i>=1)
{
printf("%ld*%ld",a[i],a[i]);
if(i>1)
printf("+");
n+=a[i]*a[i];
i--;
}
printf("=%ld\n",n);
}
}
大家要注意一下break和continue的特性,而且个人建议的话goto语句能不用就不用...