C语言技术论坛

C语言技术论坛,第1张

#include<stdio.h>

#include<math.h>

int

isok(int

n)

/*判断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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11351991.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存