长安跨越王1.5双排新款:C++程序题救解

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 00:48:33
题目
打印所有的"水仙花数"(它是一个三位数,其各位数字立方等于该数本身).

这是个C++程序题,望高手能把它的步骤和设计思想写下来好吗?
谢谢
Compiling...
1.cpp
E:\樱桃小\1.cpp(2) : error C2501: 'usingnamespacestd' : missing storage-class or type specifiers
E:\樱桃小\1.cpp(13) : error C2065: 'cout' : undeclared identifier
E:\樱桃小\1.cpp(13) : warning C4554: '<<' : check operator precedence for possible error; use parentheses to clarify precedence
E:\樱桃小\1.cpp(13) : error C2065: 'endl' : undeclared identifier
E:\樱桃小\1.cpp(13) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
执行 cl.exe 时出错.

我在执行5楼的兄弟的那个程序时,所出的错
请问是哪里错的呢?

如果我我就用穷举法
个位的取得方法是让这个数余10,得余数,
十位的取得方法是让这个数余100,再除10取得数,
百位的直接除以100,得取得的数。

我现在的电脑没有编译器没有MSDN,试着做一下,错误肯定多多。

int a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i%100)/10;
c=(i%100)%10;
if(i==(a*a*a)+(b*b*b)+(c*c*c)) cout<<i<<\n;
}

-------
呵呵,鬼兄,这回你成我楼上的了。我怎么觉得效率上我的应该算好的呢:)因为我的嵌套少,还没有函数调用啊,至于算法上,你的也是每次组一次,我的也是拆一次,应该差不多啦!如果要是追求效率,你的那个应该把函数去掉,要不频频调用,反回,不如直接a*a*a来得直接高效。

1+2+3+4+5+6+7+8+9

#include<iostream>
usingnamespacestd;

inline int get3(int v);

void getValue()
{
int i=1,j=0,k=0;
for(;i<10;i++)
for(;j<10;j++)
for(;k<10;k++)
if(get3(i*100+j*10+k)==get3(i)+get3(j)+get3(k))
cout<<i*100+j*10+k<<endl;
}
int get3(int v)
{
return v*v*v;
}

楼上的可以通过,但是就效率来看,反过来遍历(把3位数字都套个循环)比楼上的要快的多呵呵

=====================================

jiaxu2k兄说的函数去掉有道理!我改了下,这下加了个inline呵呵,直接去掉好难看啊,会被同事们骂的呵呵,其实我们两个循环的次数是一样的 最主要的区别是我用的是乘,你用的是模,而速度上的区别应该是模费的时间要多些,但是就如aspirer兄所说,由于我每次都有2次乘,于是我试了一下,更改过的的确乘还是要快一些的,应该有比我们2个更好的算法的,谢谢你的提醒~ 嘻嘻,XD们,我又是你们楼下的了~~~

abc=a^3+b^3+c^3 a!=0,
abc=a*100+b*10+c

就二位的我评一评好了,我再写代码已经没有什么意义了,他们写的都不错.
其实二位的都是用到穷举算法,对于这一类题目什么也不用多想用的就是穷举.此其一.
先发出来的,说不用频频调用,其实以它的来说,做乘法时,其实也是要用到存储空间的(比如做,a*a时,总得有一个空间先存放这个临时的中间变量),但是他的算法,整体看上去,比较清爽.(但差个函数体哦,不过仅做算法也正常,此外,在判断时的代码中可能会少一对括号,可以把i调到后面或者再加括号)
而后来的那一段代码,也不错.
实际,你都可以上机通过一下,看哪个成功.

usingnamespacestd 是这样的using namespace std;