cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 11821|回复: 55

[求助] For循环语句嵌套问题

[复制链接]
发表于 2012-1-19 20:02:46 | 显示全部楼层 |阅读模式
本帖最后由 yangsc825 于 2012-1-20 10:16 编辑

就以9860为例
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
这个程序是怎么运行的?难道是依次从外到内循环里面一层的循环语句?我的意思是希望能枚举出a b c不同时不同的x的值,进行比较
那样的循环语句怎么编写?
这是一道题,有一个数码都不为0的三位数,其平方为一个中间有三个0的六位数,求这个三位数
到底怎么写达到使a b c不同组合时得出不同x进行比较的效果?
 楼主| 发表于 2012-1-19 20:10:13 | 显示全部楼层
当然,我这个程序是错的
发表于 2012-1-19 21:17:57 | 显示全部楼层
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

你调用了3个for循环,就是从里向外运行,时间复杂度n^3,估计会挂
 楼主| 发表于 2012-1-19 21:25:57 | 显示全部楼层
算了也不久,可能有十几秒
 楼主| 发表于 2012-1-19 21:27:36 | 显示全部楼层
本帖最后由 yangsc825 于 2012-1-19 21:31 编辑

不过正确的应该怎么写呢,这是09年ti杯的一道题
发表于 2012-1-19 21:32:33 | 显示全部楼层
ti的你用卡西欧写什么.....
 楼主| 发表于 2012-1-19 21:38:42 | 显示全部楼层
额~我只是想用9860算算,我没参赛,结果发现了这个问题,到底怎么写呢
发表于 2012-1-19 21:57:20 | 显示全部楼层
其实很简单,就三个数:
200704
300304
900601
发表于 2012-1-19 21:57:54 | 显示全部楼层
代码:
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;     
}
发表于 2012-1-19 21:58:58 | 显示全部楼层
这个是轻度剪枝的暴搜,时间复杂度mn,很快了
 楼主| 发表于 2012-1-19 22:01:24 | 显示全部楼层
你的答案完全正确!让我研究研究你的代码,在9860上怎么编呢
 楼主| 发表于 2012-1-19 22:03:23 | 显示全部楼层
表示你的代码我看不懂,c我只懂一点……
发表于 2012-1-19 22:07:17 | 显示全部楼层
卡西欧上取模和跳过循环的函数是什么?我给你翻译一下
 楼主| 发表于 2012-1-19 22:11:22 | 显示全部楼层
取模是Mod(n,m),n除以m的余数
 楼主| 发表于 2012-1-19 22:12:31 | 显示全部楼层
跳出循环用break或goto
发表于 2012-1-19 22:24:01 | 显示全部楼层
if时候的或怎么说
 楼主| 发表于 2012-1-19 22:26:29 | 显示全部楼层
什么意思?
发表于 2012-1-19 22:38:30 | 显示全部楼层
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
发表于 2012-1-19 22:39:57 | 显示全部楼层
这下应该看得懂了吧....
发表于 2012-1-19 22:41:47 | 显示全部楼层
if Mod(i,100)=0 or Mod(i,10)=0 of Mod(i-Mod(i,10),100)=0
anzedick 发表于 2012-1-19 22:38

这句的of打错了,应该是or
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-3-29 05:23 , Processed in 0.064821 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表