求一个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我还在这提问干什么?- -||
展开
 我来答
百度网友6e30eac8c
2009-04-21 · 超过11用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:39.5万
展开全部
#include <stdio.h> 
#define N 10
int main(){
    int a[N*N],x=0,y=0,m=0,i;
    for(i=0;i<N*N;i++){
        a[x+y*N]=i;
        x+=((m+1)&1)*(1-m);
        y+=((m+0)&1)*(2-m);
        if(x==y||x+y==N-1){
            m=++m&3;
            if(!m)x=++y;
        }
    }
    for(i=0;i<N*N;i++){
        printf("%02d%c",a[i],(i%N+1)/N*10);
    }
    getchar();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
--
2022-12-05 广告
图形化编程简单理解为用积木块形式编程,scratch和python也是其中的一种,属于入门级编程,以其简单生动的画面获得无数学生的喜爱,深圳市创客火科技有限公司是一家做教育无人机的公司,旗下有编程无人机,积木无人机及室内外编队,每款飞机含有... 点击进入详情页
本回答由--提供
wangtk1982
2009-04-17 · TA获得超过3742个赞
知道大有可为答主
回答量:3206
采纳率:100%
帮助的人:1461万
展开全部
#include <stdio.h>
#include <stdlib.h>
#define N 10
#define M (N+1)
int GetNum(int i, int j)
{
int cirMin=0,tempN=N;
int cirNum =(i <= j)?(i>M-j?M-j:i):(j>M-i?M-i:j);
for (int m =1;m< cirNum;tempN -= 2,m++)
cirMin+=4*(tempN-1);
return (i <= j)?( i+j+cirMin-2*cirNum):(4*M-6*cirNum+cirMin-i-j);
}
int main()
{
for (int i=1;i<M;i++)
{
for (int j=1;j<M;j++)
printf("%02d ", GetNum(i, j));
printf("\n");
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
栩箭
2009-04-17 · TA获得超过5311个赞
知道大有可为答主
回答量:3036
采纳率:0%
帮助的人:1663万
展开全部
void main(void)
{
char a[]="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.!",*p=a;

while( *p!='!' )
{
if( *p == '.' )
printf("\n");
else
printf("%c",*p);
p++;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
别动队领导
2009-04-17 · TA获得超过399个赞
知道小有建树答主
回答量:172
采纳率:0%
帮助的人:299万
展开全部
哎,来晚了,好算法让人想尽了,整个递归的算法凑凑热闹,顺便刷刷分。
#include<stdio.h>
int a[30][30];
void fun(int s,int xa,int ya,int x,int y,int n);
int main(void)
{ int n,i,j;
printf("n=");
scanf("%d",&n);
fun(-1,1,0,-1,0,n);
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{ if(a[i][j]<10) printf("0");
printf("%d ",a[i][j]);
}
printf("\n");
}
getch();
}
void fun(int s,int xa,int ya,int x,int y,int n)
{ int i=0;
if(n==0) return;
for(;i<n;i++)
{ s++;x+=xa;y+=ya;
a[y][x]=s;
}
fun(s,1-ya-1,xa,x,y,n-!ya);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友350302d
2009-04-17 · TA获得超过669个赞
知道小有建树答主
回答量:1048
采纳率:0%
帮助的人:611万
展开全部
刚写的,不知道对不对··
#include<stdio.h>
#include<stdlib.h>
const int N = 10;
int step[4] = {1,N,-1,-N};//步长,0为向右,1为向下,2为向左,3为向上
int a[N][N];
int mark[N][N];
int main()
{
int value = 0;
int pos = 0;
int dir = 0;
int rightpos = 0;
while(pos < N*N)
{
rightpos = pos + step[(dir+1)%4];
if(!(*(mark[0]+pos) ))
{
*(mark[0]+pos) = 1;
*(a[0]+pos) = value++;
}
else if(rightpos >= N*N || mark[rightpos])//前右都已走过,退出
{
break;
}
if(pos == N-1|| pos==N*(N-1)||pos == N*N-1|| *(mark[0]+pos+step[dir]) )
{
dir = (dir + 1)%4; //转向
}
pos += step[dir];//pos指向下一位置
}
for(int i = 0; i < N ; i ++)
{
for(int j = 0; j < N; j++)
{
printf("%02d ",a[i][j]);
}
printf("\n");
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(13)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式