比比你的速度,一个简单的问题

[复制链接]
查看11 | 回复2 | 2007-9-24 13:07:45 | 显示全部楼层 |阅读模式
这个有好几种写法吧以前写的一个测试.时间好像用了挺久呢.输入三个数.长.宽.方向.(为零向左旋.不为零向右)#include "stdio.h"int main(){
int i,j,t;
while(scanf("%d%d%d",&j,&i,&t)!=EOF){
int n=1,h=0,s=0, k[31][31]={{},{}};
i--;j--;
while(t){
k[h]=n++;
if((h>=s || k[s-1][h]!=0) && h0 && k[s-1][h]==0)s--;
else break;
}
while(!t){
k[h]=n++;
if((s>=h || k[h-1]!=0) && s0 && k[s-1][h]==0)s--;
else if( h>0 && k[h-1]==0)h--;
else break;
}
for(s=0;s<=i;s++){
for(h=0;h<=j;h++){
printf("%4d",k[h]);
}
printf("\n");
}
printf("\n");
}
return 0;}
回复

使用道具 举报

千问 | 2007-9-24 13:07:45 | 显示全部楼层
20分钟void testFunction( int n ){ int arrayLen = n * n; int* tempArray = new int[ arrayLen ]; int areaSet = 0; int areaEnd = n - 1; int drection = 0; int x = 0; int y = 0; for( int i = 0; i < arrayLen; i ++ ) {switch( drection ){case 0: ( &tempArray[ y * n ] )[ x ++ ] = i + 1; if( x == areaEnd ) drection ++; break;case 1: ( &tempArray[ ( y ++ ) * n ] )[ x ] = i + 1; if( y == areaEnd ) drection ++; break;case 2: ( &tempArray[ y * n ] )[ x -- ] = i + 1; if( x == areaSet ) drection ++; break;case 3: ( &tempArray[ ( y -- ) * n ] )[ x ] = i + 1; if( y - areaSet == 1 ) {
areaSet ++;
areaEnd --;
drection = 0; } break;} } for ( int y = 0; y < n; y ++ ) {for( int x = 0; x < n; x ++ ){ printf_s( "%04d\t", ( &tempArray[ y * n ] )[x] );}printf_s( "\n" ); } delete[] tempArray;}
回复

使用道具 举报

千问 | 2007-9-24 13:07:45 | 显示全部楼层
哪有那么麻烦啊~定义2个2维数组 一个a[3][3]按顺序寸123894765第二个也类似~用CASE语句进行控制如果n=3输出a[3][3]没输出一行进行换行 ~如果输入4用类似办法 ~我觉得5分钟就能写出来 ~应该可以实现吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行