C++/C语言,下列二维数组怎么赋值,难道一个一个赋值吗?求大神指教。

 我来答
百度网友83cdc1c
2014-01-10 · TA获得超过5792个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:856万
展开全部
#include<stdio.h>
#define N 10
void main (void)
{
    int a[N][N];
    int i,j,n,k,s,c=1;
    i=5,j=4;
    a[i][j]=c++;
    n=1;
    while(1)
    {
        if(n%2==0)
            s=-1;
        else
            s=1;
        for(k=0;k<n;k++)
        {
            j+=s;
            if(j>=N || j<0)
                goto __end;
            a[i][j]=c++;
        }
        for(k=0;k<n;k++)
        {
            i+=-s;
            if(i>=N || i<0)
                goto __end;
            a[i][j]=c++;
        }
        n++;
    }
__end:
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
            printf("%-4d", a[i][j]);
        printf("\n");
    }
    return 0;
}

水焱新火
2014-01-10 · TA获得超过256个赞
知道小有建树答主
回答量:144
采纳率:100%
帮助的人:128万
展开全部

看了下答案,虽然有人回答了,但是还是贴一下我的,感觉c++少用goto的好,我的逻辑有点像贪吃蛇,控制开头转向一直绕进去

#include <iostream>
#include <iomanip>
using namespace std;
enum Direcation {
    right = 0,
    down,
    left,
    up
};
//这里可以随意改表格宽度,多少都行,只是大于18就不好显示了
#define LENGTH 10
void main()
{
    int start =LENGTH * LENGTH;
    int array[LENGTH][LENGTH]={0};
    Direcation direcation = Direcation::right;
    for (int i = 0;start>0 ; ) {
        for (int j = 0;start>0 ; ) {
            array[i][j] = start--;
            switch (direcation) {
            case Direcation::right:
                //j==9是最后一列,在前判断保证不溢出,或者array[i][j+1] !=0就是后面的列已经使用过,转向下
                if(j==LENGTH-1 || array[i][j+1] !=0)
                {
                    direcation = Direcation::down;
                    i++;
                }else{
                    j++;
                }
                break;
            case Direcation::down:
                if(i==LENGTH-1 || array[i+1][j] !=0)
                {
                    direcation = Direcation::left;
                    j--;
                }else{
                    i++;
                }
                break;
            case Direcation::left:
                if(j==0 || array[i][j-1] !=0)
                {
                    direcation = Direcation::up;
                    i--;
                }else{
                    j--;
                }
                break;
            case Direcation::up:
                if(i==0 || array[i-1][j] !=0)
                {
                    direcation = Direcation::right;
                    j++;
                }else{
                    i--;
                }
                break;
            default:
                break;
            }
        }
    }
    for (int i = 0; i < LENGTH; ++i) {
        for (int j = 0; j < LENGTH; ++j) {
            cout<<setw(4)<<array[i][j];
        }
        cout<<endl;
    }
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
本人神ID啊
2014-01-10 · TA获得超过115个赞
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:96.2万
展开全部
这100个数字间是有逻辑关系的,从1-100是逆时针+1的,可以用条件语句+循环赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bhlvzzl1314
2014-01-10
知道答主
回答量:8
采纳率:0%
帮助的人:3.4万
展开全部
这个二维数组 其实是另外一种问题,其实在意义在于如何使用下标,最二维数组进行顺时针的遍历。 遍历完成后只需从100开始递减赋值就行了。
你学C多久了,谁给你出的题目?
email:905049286@qq.com
追问
没学多久,做了半年j2ee开发,今年考的复旦大学计算机研究生,准备复试呢,这是去年复旦研究生复试机试题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太一zz
2014-01-10 · TA获得超过659个赞
知道小有建树答主
回答量:314
采纳率:0%
帮助的人:151万
展开全部
找各行数字的规律能少写几行 但有找的功夫或许都生敲完了 很纠结
比如第一行
int A[10][10];
for(int i=0;i<10;i++)
{
A[0][i]=100-i;
}
第一行完了 这样子
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式