greenery 发表于 2020-10-6 11:45:31

循环赛日程BUG

这个代码在n<=2时还正常,n>=3就无法显示。。。{:10_292:}
#include <stdio.h>
#include <math.h>
int a={0};
/*
void Do(int maxs)
{
        int i,j,t,currs,pres;
        currs=2;
        a=1;
        a=2;
        a=2;
        a=1;
        for(t=1;t<maxs;t++)
        {
                pres=currs;
                currs*=2;
               
                for(i=pres+1;i<=currs;i++)
                {
                        for(j=1;j<=pres;j++)
                        {
                                a=a+pres;
                        }
                }
               
                for(i=1;i<=pres;i++)
                {
                        for(j=pres+1;j<=currs;j++)
                        {
                                a=a+pres;
                        }
                }
                for(i=pres+1;i<=currs;i++)
                {
                        for(j=pres+1;j<=currs;j++)
                        {
                                a=a;
                        }
                }
               
        }
       
}
*/

void Do(int k)
{
        int i,j,t,n,temp;
        n=2;
        a=1;
        a=2;
        a=2;
        a=1;
        for(t=1;t<k;t++)
        {
                temp=n;
                n=n*2;
               
                for(i=temp+1;i<=n;i++)
                {
                        for(j=1;j<=temp;j++)
                        {
                                a=a+temp;
                        }
                }
               
                for(i=1;i<=temp;i++)
                {
                        for(j=temp+1;j<=n;j++)
                        {
                                a=a+temp;
                        }
                }
                for(i=temp+1;i<=n;i++)
                {
                        for(j=temp+1;j<=n;j++)
                        {
                                a=a;
                        }
                }
               
        }
       
}
int main(void) {
        int maxs;
        int n,i,j;
        scanf("%d",&n);
        maxs=pow(2,n);
        Do(maxs);
        for(i=1;i<=maxs;i++)
        {
                for(j=1;j<=maxs;j++)
                {
                        printf("%d ",a);
                }
                putchar('\n');
        }
       
        return 0;
}

happy含笑 发表于 2020-10-6 13:10:39

greenery 发表于 2020-10-6 13:47:23

happy含笑 发表于 2020-10-6 13:10
路过

啊这{:10_330:}

巴巴鲁 发表于 2020-10-6 15:58:40

你这个程序只能执行1或4个队
如果想执行更多的,要用到递归
参考:https://fishc.com.cn/forum.php?mod=viewthread&tid=79184&extra=page%3D2%26filter%3Dtypeid%26typeid%3D570

greenery 发表于 2020-10-6 19:06:04

巴巴鲁 发表于 2020-10-6 15:58
你这个程序只能执行1或4个队
如果想执行更多的,要用到递归
参考:https://fishc.com.cn/forum.php?mod=v ...

感谢,我就说小甲鱼有一次作业我没做的,好像就是这道题{:10_307:}
不过我同学这样子的(只用了迭代法)成功了,我的算法和他应该一样的,不知道哪里翻车了。。。
以下是迭代法成功的例子:(我实在找不出我哪里敲错了{:10_337:})
#include <stdio.h>
#include <stdlib.h>

int a;
int n = 1;

void fen(int k);

int main()
{
    int k, i, j;
    a = 1;
    scanf("%d", &k);
    fen(k);
    for(i = 0; i < n; i++)
    {
      for(j = 0; j < n; j++)
            printf("%d ", a);
      printf("\n");
    }
   return 0;
}

void fen(int k)
{
   int i, j, t;
   for(t = 0; t < k; t++)
   {
         int half = n;
         n = n * 2;
      for(j = 0; j < half; j++)
      {
         for(i = half; i < n; i++)
         {
         a = a + half;
         }
      }
      for(i = 0; i < half; i++)
      {
         for(j = half; j < n; j++)
         {
         a = a + half;
         }
      }
      for(j = half; j < n; j++)
      {
         for(i = half; i < n; i++)
         {

         a = a;
         }
      }

   }
}

巴巴鲁 发表于 2020-10-6 19:59:21

greenery 发表于 2020-10-6 19:06
感谢,我就说小甲鱼有一次作业我没做的,好像就是这道题
不过我同学这样子的(只用了迭代法) ...

你同学牛啊,找到规律了
从27~54行是一个大循环,在里面悠悠几个小循环
页: [1]
查看完整版本: 循环赛日程BUG