求一个C语言算法
用C语言在控制台打印出如下形式的字符,算法越简单,效率越高越好:00010203040506070809353637383940414243103463646566676...
用C语言在控制台打印出如下形式的字符,算法越简单,效率越高越好:
00 01 02 03 04 05 06 07 08 09
35 36 37 38 39 40 41 42 43 10
34 63 64 65 66 67 68 69 44 11
33 62 83 84 85 86 87 70 45 12
32 61 82 95 96 97 88 71 46 13
31 60 81 94 99 98 89 72 47 14
30 59 80 93 92 91 90 73 48 15
29 58 79 78 77 76 75 74 49 16
28 57 56 55 54 53 52 51 50 17
27 26 25 24 23 22 21 20 19 18
鄙视下直接printf的
-------------------------------------------
感谢所有回答者,今天晚上结贴!我会选出最好的算法。
-------------------------------------------
QQ3585261 - 举人 五级 4-17 18:41
有本事你写一个更好的?别在这说风凉话!
这种题目的目的就是考验逻辑思维能力,直接printf我还在这提问干什么?- -|| 展开
00 01 02 03 04 05 06 07 08 09
35 36 37 38 39 40 41 42 43 10
34 63 64 65 66 67 68 69 44 11
33 62 83 84 85 86 87 70 45 12
32 61 82 95 96 97 88 71 46 13
31 60 81 94 99 98 89 72 47 14
30 59 80 93 92 91 90 73 48 15
29 58 79 78 77 76 75 74 49 16
28 57 56 55 54 53 52 51 50 17
27 26 25 24 23 22 21 20 19 18
鄙视下直接printf的
-------------------------------------------
感谢所有回答者,今天晚上结贴!我会选出最好的算法。
-------------------------------------------
QQ3585261 - 举人 五级 4-17 18:41
有本事你写一个更好的?别在这说风凉话!
这种题目的目的就是考验逻辑思维能力,直接printf我还在这提问干什么?- -|| 展开
15个回答
展开全部
tc2.0测试通过 输入20以内的数字均可
#include <stdio.h>
#define YOU 1
#define XIA 2
#define ZUO 3
#define SHA 4
main()
{
int iDrct=1; /* 方向 1右 2下 3左 4上 */
int mxY,mxZ,mxX,mxS; /* 横向最大数 右、左、下、上 */
int i=0,j=0,iCt=0,k; /* 循环数 */
int iStr[20][20]; /* */
int maxI;
printf( "Input:" );
scanf( "%d", &k );
if( k > 20 )
{
printf("ERR:[%d]too large!", k);
getchar();
return -1;
}
else if( k < 1 )
{
printf("ERR:[%d]too small!", k);
getchar();
return -1;
}
maxI = k*k ;
mxY = mxX = k ;
mxZ = mxS = 1 ;
while( iCt < maxI )
{
iCt ++;
iStr[i][j] = iCt-1;
switch( iDrct )
{
case YOU: /* 右 */
if( j<mxY-1 )
j++;
else /* 到头下移 */
{
iDrct = XIA ; /* 下次开始下移 */
i++;
mxS++; /* 下次向上时界限下移 */
}
break;
case XIA: /* 下 */
if( i < mxX-1 )
i++;
else /* 到头左移 */
{
iDrct = ZUO ; /* 下次开始左移 */
j--;
mxY--; /* 下次向右时界限下移 */
}
break;
case ZUO: /* 左 */
if( j > mxZ-1 )
j--;
else /* 到头上移 */
{
iDrct = SHA ; /* 下次开始上移 */
i--;
mxX--; /* 下次向下时界限下移 */
}
break;
case SHA: /* 上 */
if( i > mxS-1 )
i--;
else
{
iDrct = YOU ; /* 下次开始右移 */
j++;
mxZ++; /* 下次向左时界限下移 */
}
break;
default:
break;
}
}
for( i = 0; i < k; i++ )
for( j=0;j<k;j++ )
{
printf( "%03d ", iStr[i][j] );
if( j == k-1 )
printf( "\n" );
}
getchar();
return 0;
}
#include <stdio.h>
#define YOU 1
#define XIA 2
#define ZUO 3
#define SHA 4
main()
{
int iDrct=1; /* 方向 1右 2下 3左 4上 */
int mxY,mxZ,mxX,mxS; /* 横向最大数 右、左、下、上 */
int i=0,j=0,iCt=0,k; /* 循环数 */
int iStr[20][20]; /* */
int maxI;
printf( "Input:" );
scanf( "%d", &k );
if( k > 20 )
{
printf("ERR:[%d]too large!", k);
getchar();
return -1;
}
else if( k < 1 )
{
printf("ERR:[%d]too small!", k);
getchar();
return -1;
}
maxI = k*k ;
mxY = mxX = k ;
mxZ = mxS = 1 ;
while( iCt < maxI )
{
iCt ++;
iStr[i][j] = iCt-1;
switch( iDrct )
{
case YOU: /* 右 */
if( j<mxY-1 )
j++;
else /* 到头下移 */
{
iDrct = XIA ; /* 下次开始下移 */
i++;
mxS++; /* 下次向上时界限下移 */
}
break;
case XIA: /* 下 */
if( i < mxX-1 )
i++;
else /* 到头左移 */
{
iDrct = ZUO ; /* 下次开始左移 */
j--;
mxY--; /* 下次向右时界限下移 */
}
break;
case ZUO: /* 左 */
if( j > mxZ-1 )
j--;
else /* 到头上移 */
{
iDrct = SHA ; /* 下次开始上移 */
i--;
mxX--; /* 下次向下时界限下移 */
}
break;
case SHA: /* 上 */
if( i > mxS-1 )
i--;
else
{
iDrct = YOU ; /* 下次开始右移 */
j++;
mxZ++; /* 下次向左时界限下移 */
}
break;
default:
break;
}
}
for( i = 0; i < k; i++ )
for( j=0;j<k;j++ )
{
printf( "%03d ", iStr[i][j] );
if( j == k-1 )
printf( "\n" );
}
getchar();
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的程序要求我看明白了,就是打印一螺旋矩阵啊。按照你的要求我编程如下:
#include<stdio.h>
#define MAX 300
main()
{
int i,j,m;
int a[MAX][MAX],n=00;
printf("please input your low:\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
for(j=i;j<m-i;j++)
a[i][j]=n++;
for(j=i+1;j<m-i;j++)
a[j][m-i-1]=n++;
for(j=m-i-2;j>i;j--)
a[m-i-1][j]=n++;
for(j=m-i-1;j>i;j--)
a[j][i]=n++;
}
for(i=0;i<m;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
这里的矩阵行数是可以根据你自己的需要来自由输入的,且这个算法只连续用了几个循环语句,不但算法简单而且效率也很高。很容易看懂的。如实在看不懂再来问我吧,我的电子邮箱是zhumingming1040@163.com
#include<stdio.h>
#define MAX 300
main()
{
int i,j,m;
int a[MAX][MAX],n=00;
printf("please input your low:\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
for(j=i;j<m-i;j++)
a[i][j]=n++;
for(j=i+1;j<m-i;j++)
a[j][m-i-1]=n++;
for(j=m-i-2;j>i;j--)
a[m-i-1][j]=n++;
for(j=m-i-1;j>i;j--)
a[j][i]=n++;
}
for(i=0;i<m;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
这里的矩阵行数是可以根据你自己的需要来自由输入的,且这个算法只连续用了几个循环语句,不但算法简单而且效率也很高。很容易看懂的。如实在看不懂再来问我吧,我的电子邮箱是zhumingming1040@163.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
cgiggle的程序才是最优的,具体问题具体分析,反正你那些数据也是固定的,当然直接printf的效果最好!!在能完成需求的情况下何必卖弄算法~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我就猜到会有这种"简单"的答案
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种题见过 挺难的 以前看答案来者 现在忘了哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询