
#include<math.h>
int
isok(int
n)
{
int
i
int
j=sqrt(n)
for(i=1i<=ji++)
if(n==(i*i*i))
return
i
return
0
}
int
main()
{
int
r[2][2]={0},i,k,p,q,m,n,total
while(1)
{
r[0][0]=0
r[0][1]=0
r[1][0]=0
r[1][1]=0
k=i/2
total=0
for(p=0p<=kp++)
{
q=i-p
m=isok(p)
n=isok(q)
if(m*m*m+n*n*n==i)
{
if(total==0||(r[0][0]!=m&&r[0][0]!=n))
{
r[total][0]=m
r[total][1]=n
total++
}
if(total==2)
{
printf("%d=%d*%d*%d+%d*%d*%d=%d*%d*%d+%d*%d*%d\n",i,r[0][0],r[0][0],r[0][0],r[0][1],r[0][1],r[0][1],r[1][0],r[1][0],r[1][0],r[1][1],r[1][1],r[1][1])
return
0
}
}
}
i++
}
return
0
}
我的思路是从0开始找,找到的第一个满足条件的数就是最小的。
对每个数i来说,从p的值为0到i/2,q的值为i-p,这样i=p+q.
只要判断p和q是否都是一个数的三次方就行了。
这里我用isok(int
n)函数判断n是不是一个数的三次方。
比如p=27,m=isok(int
p)那么m=3.
如果找到第一对p和q,这时total=0,所以直接存入r[0][0],r[0][1]
然后给total加1.
当找到第二对p和q时,就要判断是否满足题中给定的条件:
条件:***其中a,b,c,d
都是自然数,且有a不等于c,a不等于d
。
***
若满足,则存入r[1][0],r[1][1]
再给total加1.
此时total=2,输出,结束程序。
当然,bee0873的程序看起来比较简单,呵呵。
我的程序的优点是:思路比较通用化,比如
从0开始找,直到找到为止,不会有1000000的限制,所以思路对别的问题也适用。
另外在时间效率上也进行了一定的控制,比如判断n是不是一个数的三次方,控制在0到sqrt(n)的范围内查找三次方根(当然还可以更精确一点),找i=p+q中的p和q时只在0到i/2内找,因为过了i/2后,p和q的值只是和以前的p、q反了一下。
如果采用bee0873的程序,没有对题目条件进行审核,会有一大堆的输出呀,有的不满足条件,呵呵。
楼主自选吧。
main(){float sum,luchen
char car_type
printf("please input the car_type:")
scanf("%c\n",&car_type)
printf("please input the luchen:")
scanf("%f\n",&luchen)
switch(car_type)
{case XL:if(luchen<=3)sum=7else sum=7+(luchen-3)*2.1break
case FK:if(luchen<=3)sum=8else sum=8+(luchen-3)*2.4break
case STN:if((luchen<=3)sum=9else sum=9+(luchen-3)*2.7break
}
printf("%f\n",sum)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)