比较权威的C语言论坛
博客园 C++博客 http://www.cppblog.com/
VC知识库 http://www.vckbase.com/
微软Visual C++社区 http://msdn.microsoft.com/zh-cn/visualc/aa336397.aspx
C语言帝国 http://www.vcgood.com/
单片机C语言 http://www.51c51.com/cyuyan.htm
CodeProject http://www.codeproject.com/
蚂蚁的 C/C++标准编程 http://cpp.ga-la.com/
CSDN http://www.csdn.net
C语言技术论坛
#include《stdio.h》
#include《math.h》
int
isok(int
n)
/*判断n是不是一个数的三次方*/
{
int
i;
int
j=sqrt(n);
for(i=1;i《=j;i++)
if(n==(i*i*i))
return
i;
return
0;
}
int
main()
{
int
r={0},i,k,p,q,m,n,total;
while(1)
{
r=0;
r=0;
r=0;
r=0;
k=i/2;
total=0;
for(p=0;p《=k;p++)
{
q=i-p;
m=isok(p);
n=isok(q);
if(m*m*m+n*n*n==i)
{
if(total==0||(r!=n))
{
r=m;
r=n;
total++;
}
if(total==2)
{
printf(“%d=%d*%d*%d+%d*%d*%d=%d*%d*%d+%d*%d*%d\n“,i,r);
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
然后给total加1.
当找到第二对p和q时,就要判断是否满足题中给定的条件:
条件:***其中a,b,c,d
都是自然数,且有a不等于c,a不等于d
。
***
若满足,则存入r
再给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的程序,没有对题目条件进行审核,会有一大堆的输出呀,有的不满足条件,呵呵。
楼主自选吧。
c语言论坛
首先,else if(shi_alm==prog_alm)这句要求时间“时”既等于上限又等于下限不符合逻辑,应该为或的关系
其次,关于“分”的上下限,对于你给出的例子大部分是下限是0上限也是0,小于报警上限并且大于下限之类的条件根本就是错误的
建议你把时间换算成分钟来判断,如10:10就是10*60+10=610,12:00就是12*60=720,所有时间换算在这两个数之间的就是在这两个时间之间
-c论坛