For循环语句嵌套问题
本帖最后由 yangsc825 于 2012-1-20 10:16 编辑就以9860为例
for 1→a to 9
for 1→b to 9
for 1→c to 9
100000*a10000*bc→x
if x=(int(x^0.5))^2
then x^0.5◢
ifend
next
next
next
这个程序是怎么运行的?难道是依次从外到内循环里面一层的循环语句?我的意思是希望能枚举出a b c不同时不同的x的值,进行比较
那样的循环语句怎么编写?
这是一道题,有一个数码都不为0的三位数,其平方为一个中间有三个0的六位数,求这个三位数
到底怎么写达到使a b c不同组合时得出不同x进行比较的效果? 当然,我这个程序是错的
for 1→a to 9
for 1→b to 9
for 1→c to 9
100000*a+10000*b+c→x
if x=(int(x^0.5))^2
then x^0.5◢
ifend
next
next
next
yangsc825 发表于 2012-1-19 20:02 http://www.cncalc.org/images/common/back.gif
你调用了3个for循环,就是从里向外运行,时间复杂度n^3,估计会挂 算了也不久,可能有十几秒 本帖最后由 yangsc825 于 2012-1-19 21:31 编辑
不过正确的应该怎么写呢,这是09年ti杯的一道题 ti的你用卡西欧写什么..... 额~我只是想用9860算算,我没参赛,结果发现了这个问题,到底怎么写呢 其实很简单,就三个数:
200704
300304
900601 代码:
main()
{
// freopen("test.out","w",stdout);
int i,k,b,count;
for(i=317;i<=999;i++)
{
if(i%100==0||i%10==0||(i-i%10)%100==0)
continue;
else
{
count=0;
k=i*i;
if(k%10==0)
count++;
else
k=k-k%10;
if(k%100==0)
count++;
else
k=k-k%100;
if(k%1000==0)
count++;
else
k=k-k%1000;
if(k%10000==0)
count++;
else
k=k-k%10000;
if(k%100000==0)
count++;
if(count==3)
printf("%d\n",i*i);
}
}
return 0;
} 这个是轻度剪枝的暴搜,时间复杂度mn,很快了 你的答案完全正确!让我研究研究你的代码,在9860上怎么编呢 表示你的代码我看不懂,c我只懂一点…… 卡西欧上取模和跳过循环的函数是什么?我给你翻译一下 取模是Mod(n,m),n除以m的余数 跳出循环用break或goto if时候的或怎么说 什么意思? for 317→i to 999
if Mod(i,100)=0 or Mod(i,10)=0 of Mod(i-Mod(i,10),100)=0
then nothing....
else
0→count
i^2→k
if Mod(k,10)=0
then count+1→count
else k - Mod(k,10)→k
ifend
if Mod(k,100)=0
then count+1→count
else k - Mod(k,100)→k
ifend
if Mod(k,1000)=0
then count+1→count
else k - Mod(k,1000)→k
ifend
if Mod(k,10000)=0
then count+1→count
else k - Mod(k,10000)→k
ifend
if Mod(k,100000)=0
then count+1→count
ifend
if count=3
then i*i◢
ifend
ifend
next 这下应该看得懂了吧....
if Mod(i,100)=0 or Mod(i,10)=0 of Mod(i-Mod(i,10),100)=0
anzedick 发表于 2012-1-19 22:38 http://www.cncalc.org/images/common/back.gif
这句的of打错了,应该是or