iostream-C++蛇形填数问题, 输出有问题

问题描述

C++蛇形填数问题, 输出有问题

以下是代码,麻烦大神看一下有没有错
输入:n = 4;
结果:14 15 16 1
0 0 0 2
0 0 0 3
7 6 5 4

 #include <iostream>
#include <iomanip>
#define maxn 20
using namespace std;
int str[maxn][maxn];
int main()
{
    cout << "输入方阵:";
    int n;
    cin >> n;
    int x = 0, y = n - 1, tot = 1;
    memset(str,  0,  sizeof(str));
    str[0][n - 1] = 1;
    while (tot < n * n)
    {
        while (x+1< n  && str[x+1][y] == 0)
            str[++x][y] = ++tot;//down move
        while (y+1>= 0 && str[x][y-1] == 0)
            str[x][--y] = ++tot;//left move
        while (x - 1 >= 0 && str[x - 1][y] == 0)
            str[--x][y] = ++tot;//up move
        while (y + 1 < n  && str[x][y + 1] == 0)
            str[x][++y] = ++tot;
    }
    for (x = 0; x < n; x++)
    {
        for (y = 0; y < n; y++)
            cout << setw(5) << str[x][y];
        cout << endl;
    }
    system("pause");
    return 0;
}

解决方案

 #include <iostream>
#include <iomanip>
#define maxn 20
using namespace std;
int str[maxn][maxn];
int main()
{
    cout << "输入方阵:";
    int n;
    cin >> n;
    int x = 0, y = n - 1, tot = 1;
    memset(str,  0,  sizeof(str));
    str[0][n - 1] = 1;
    while (tot < n * n)
    {
        while (x+1< n  && str[x+1][y] == 0)
            str[++x][y] = ++tot;//down move
        while (y-1>= 0 && str[x][y-1] == 0) //修改
            str[x][--y] = ++tot;//left move
        while (x - 1 >= 0 && str[x - 1][y] == 0)
            str[--x][y] = ++tot;//up move
        while (y + 1 < n  && str[x][y + 1] == 0)
            str[x][++y] = ++tot;
    }
    for (x = 0; x < n; x++)
    {
        for (y = 0; y < n; y++)
            cout << setw(5) << str[x][y];
        cout << endl;
    }
    system("pause");
    return 0;
}
时间: 2025-01-21 01:42:37

iostream-C++蛇形填数问题, 输出有问题的相关文章

蛇形填 数

蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入 直接输入方陈的维数,即n的值.(n<=100) 输出 输出结果是蛇形方陈. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 细心的朋友可以发现一个特点, 要填 数,其实就是一圈一圈的填 数, 一圈就是4个循环,分别处理右列,下行,左列,上行.

蛇形填数

样例输入: 4 样例输出: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int a[50][50]; int i,j,x,y,cot,n; scanf("%d",&n); memset(a,0,sizeof(a)); cot=a[0][n-1]=1; y=n-1,x=

C语言蛇形填数

思路就是:右->下->左->上 #include<stdio.h> #include<string.h> int a[10][10]; int main() { int i,j, n, num=0; memset(a, 0, sizeof(a)); scanf("%d", &n); num=a[i=0][j=0]=1; while(num < n*n) { while(j<n-1 && !a[i][j+1])

NYOJ 33(回转填数)

  回转填数(题目叫蛇形填数) 时间限制:3000 ms | 内存限制:65535 KB 难度:3   描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为:10 11 12 19 16 13 28 15 14 37 6 5 4   输入 直接输入方陈的维数,即n的值.(n<=100) 输出 输出结果是蛇形方陈. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 #include <stdio.h> int main() { int a[101][1

编程-java 菜鸟求助 求各路大神指教 九宫格如何填数? 需求如下

问题描述 java 菜鸟求助 求各路大神指教 九宫格如何填数? 需求如下 /** 打印一个 9*9 的九宫格 必须满足一下两个条件 条件1: 任意一行或者一列都满足9个不同的数字 条件2: 任意一个小9格正方形都满足9个不同的数字 思想: 通过设定满足条件 无限次循环生成任意数字的矩阵 直到满足后跳出循环 结果失败 */ 解决方案 package com; import java.util.Random; public class ShuDu { /** 存储数字的数组 / private st

如何判断完数然后输出6=1+2+3 28=1+2+4+7+14

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<math.h> int f(int num){ int index = 0; int sum=0; int a[50]; for (int i = 1; i < num; i++){ if (num%i == 0){ a[index] = i; index++; sum += i; } } //打印数据 //更多精彩内容:http://www.bianceng

递归-新手求教 1-n个数 k个不同的数一组 输出所有可能

问题描述 新手求教 1-n个数 k个不同的数一组 输出所有可能 这是我编的,基本可以全部列举,但输出的时候相同头尾的多组第1和第k个数只输出一次(例如1开头5结尾:输出1 23 24 34 5 我想输出1 2 3 5 , 1 2 4 5, 1 3 4 5)怎么办用的递归 函数第一个形参是每组数的数量 上例为5 #include #include int ii; int iii; int bbb(int n,int i, int j, int k,int a[]) { for(int iii=i;

jQuery获取table行数并输出单元格内容的实现方法_jquery

本文实例讲述了jQuery获取table行数并输出单元格内容.分享给大家供大家参考,具体如下: js部分: <script language="javascript" type="text/javascript"> $(function() { $("#txtInput").attr("value", "90"); var v_temp = $("#lblMessage").

数据结构栈实现进制转换遇到问题十进制数255 输出的十六进制数是F15F15 哪里错了

问题描述 数据结构栈实现进制转换遇到问题十进制数255 输出的十六进制数是F15F15 哪里错了 //进制转换函数 void conversion(int n,int r) { SqStack S;//构建一个栈 InitStack(S); while(n) { Push(S,n%r);//数据入栈 n=n/r; } while(!StackEmpty(S)) { SElemType e; Pop(S,e);//数据出栈 switch(e) { case 0: break; case 1: br