标题:一个小矩阵-奇数与偶数的运行速度差别超级大……
只看楼主
hujing16
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-12-31
 问题点数:0 回复次数:2 
一个小矩阵-奇数与偶数的运行速度差别超级大……
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
main()
{ int**a;
int n,i,j,y,k;
printf("please input the integer n:\n");
scanf("%d",&n);
a=(int**)malloc(sizeof(int*)*n);
   for(i=0;i<n;i++)
        a[i]=(int*)malloc(sizeof(int)*n);
  y=1;
  k=1;
  i=0;j=0;
while(y<=n*n)
  { for((i=k-1)&&(j=k-1);j<=(n-k);j++)
      {a[j][i]=y;
      y++;}
    y--;
    for(j--;(i<=(n-k))&&(y<=n*n);i++)
      {a[j][i]=y;
      y++;}
    y--;
    for(i--;(j>=k-1)&&(y<=n*n);j--)
      {a[j][i]=y;
      y++;}
    y--;
       for(j++;(i>=k)&&(y<=n*n);i--)
      {a[j][i]=y;
      y++;}
   k++;
   }
for(i=0;i<n;i++)
          { for(j=0;j<n;j++)
             printf("%-4d",a[i][j]);
              printf("\n");
           }
}
脑子抽抽编了个小程序,目的是s型给一个任意的n*n矩阵输入值;
在VS上运行一跑,如果输入的n是偶数,结果秒出;如果输入的n是奇数的话,等待时间超级超级长,超过了5s……这是为什么呢?
(同时也求助更简单的算法,比如递推或者求结束点规律之类的方法;语言用C ^—^)
搜索更多相关主题的帖子: include warning please 
2016-12-31 21:50
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
while(y>0)

这样改试试看~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-31 22:18
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
补充一下原理:偶数的平方能被4整除,而,奇数,则不能,原因在结束循环的位置上~

再优化了一下

 while(k<n)这样就容易理解多了~

[此贴子已经被作者于2016-12-31 22:34编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-31 22:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-473176-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.501293 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved