yangsc825 发表于 2012-1-19 20:02:46

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进行比较的效果?

yangsc825 发表于 2012-1-19 20:10:13

当然,我这个程序是错的

anzedick 发表于 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 http://www.cncalc.org/images/common/back.gif
你调用了3个for循环,就是从里向外运行,时间复杂度n^3,估计会挂

yangsc825 发表于 2012-1-19 21:25:57

算了也不久,可能有十几秒

yangsc825 发表于 2012-1-19 21:27:36

本帖最后由 yangsc825 于 2012-1-19 21:31 编辑

不过正确的应该怎么写呢,这是09年ti杯的一道题

anzedick 发表于 2012-1-19 21:32:33

ti的你用卡西欧写什么.....

yangsc825 发表于 2012-1-19 21:38:42

额~我只是想用9860算算,我没参赛,结果发现了这个问题,到底怎么写呢

anzedick 发表于 2012-1-19 21:57:20

其实很简单,就三个数:
200704
300304
900601

anzedick 发表于 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;   
}

anzedick 发表于 2012-1-19 21:58:58

这个是轻度剪枝的暴搜,时间复杂度mn,很快了

yangsc825 发表于 2012-1-19 22:01:24

你的答案完全正确!让我研究研究你的代码,在9860上怎么编呢

yangsc825 发表于 2012-1-19 22:03:23

表示你的代码我看不懂,c我只懂一点……

anzedick 发表于 2012-1-19 22:07:17

卡西欧上取模和跳过循环的函数是什么?我给你翻译一下

yangsc825 发表于 2012-1-19 22:11:22

取模是Mod(n,m),n除以m的余数

yangsc825 发表于 2012-1-19 22:12:31

跳出循环用break或goto

anzedick 发表于 2012-1-19 22:24:01

if时候的或怎么说

yangsc825 发表于 2012-1-19 22:26:29

什么意思?

anzedick 发表于 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

anzedick 发表于 2012-1-19 22:39:57

这下应该看得懂了吧....

anzedick 发表于 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 http://www.cncalc.org/images/common/back.gif
这句的of打错了,应该是or
页: [1] 2 3
查看完整版本: For循环语句嵌套问题