语言入门-题目33(蛇形矩阵)_模拟

来源:互联网 发布:sql insert用法 编辑:程序博客网 时间:2024/06/05 02:30

其实老早我就写过这个蛇形矩阵的题目了.所以这次还算是比较轻松的写出来了,只不过是可惜的是自己还是写了比较长的时间

而且也改错改了一些时间.嘿嘿.我觉得这道题目就是一道模拟的题目.

大家给看看咯.嘿嘿.

#include <stdio.h>#include <string.h>#include <iostream>#include <string>#include <algorithm>using namespace std;int N;int a[111][111];void Slove (){int d = N - 1; //第一点就是注意的这个,解题的思路是模拟.要是让你在纸上画出来,你是怎么画的呢? int i = 1;int j = N;int cunt = 1;while (d > 0){for (int k = 1; k <= d; k++){a[i][j] = cunt ++;i++;}for (int k = 1; k <= d; k++){a[i][j] = cunt ++;j--;}for (int k = 1; k <= d; k++){a[i][j] = cunt ++;i--;}for (int k = 1; k <= d; k++){a[i][j] = cunt ++;j++;}j--; //注意这个,因为每次到结束的时候,j都会多加一次; i++; //注意起始状态的时候i就已经归到他应该的地方去了,所以要i自加1; d -= 2; //每转一圈循环次数都要减去2的; }if (cunt == N * N) //这是最重要的了,,因为你设置的循环出来的条件是d>0.所以又时候d=0的时候是没有办法输出的,就得单独输出了. {a[i][j] = cunt;} }void Print (){for (int i = 1; i <= N; i++){for (int j = 1; j <= N; j++){cout << a[i][j] << " ";}cout << endl;}}int main(){cin >> N;if (N == 1){cout << "1" << endl; //这是求解的严谨性 }else{Slove ();// 这两个函数是求解的对象性,面向对象分块. Print ();}//system ("pause");return 0;}


原创粉丝点击