题目链接:https://vjudge.net/problem/UVA-232#author=0

题意:关键句:The de nitions correspond to the rectangular grid bymeans of sequential integers on \eligible" white squares.White squares with black squares immediately to the left orabove them are \eligible." White squares with no squares ei-ther immediately to the left or above are also \eligible." No other squares are numbered. All of thesquares on the rst row are numbered白色方框的左方或上方有黑色方框或者无方框,进行编号

题解:1.编号——无方框咋弄-------弄一个笼子,周围是0,0为边界标识符,注意此处应该是字符所以应写成‘0’,否则当空字符处理

2.按行输出容易,如何按列输出,又按着编号——还是像行一样先循环行,再循环列(保证编号从小到大),然后因为按列输出,所以再按行循环(从循环时的i开始,到x结束,注意不能改变i的值),并每次输出都将序号设为0,这样什么时候输出就看序号是否为0即可。

ac代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
using namespace std;
char s[20][20];
int x,y,cou=0,a[20][20];
void init()
{
    cou=0;//注意初始化
    memset(s,0,sizeof(s));
    memset(a,0,sizeof(a));
    for(int i=0; i<=x+1; i++)//安装边界
    {
        s[i][0]='0';
        s[i][y+1]='0';
    }
    for(int i=0; i<=y+1; i++)
    {
        s[0][i]='0';
        s[x+1][i]='0';
    }
}
void Num_s()//编号
{
    for(int i=1; i<=x; i++)
        for(int j=1; j<=y; j++)
            if(s[i][j]!='*')
                if(s[i][j-1]=='0'||s[i][j-1]=='*'||s[i-1][j]=='0'||s[i-1][j]=='*')
                {
                    cou++;
                    a[i][j]=cou;
                }
}
int main()
{
    int c=0;
    while(cin>>x)
    {
        if(x==0) break;
        cin>>y;
        c++;
        getchar();//吸收空行
        init();
        for(int i=1; i<=x; i++)
        {
            for(int j=1; j<=y; j++)
                s[i][j]=getchar();
            getchar();
        }
        Num_s();
        if(c!=1)//注意空行
            cout<<endl;
        cout<<"puzzle #"<<c<<":"<<endl;
        cout<<"Across"<<endl;
        for(int i=1; i<=x; i++)
        {
            int flag=0;
            for(int j=1; j<=y; j++)
            {
                if(s[i][j]!='*')
                {
                    if(flag==0)
                        cout<<setw(3)<<a[i][j]<<'.';
                    flag=1;
                    cout<<s[i][j];
                }
                else
                {
                    if(flag==1)
                        cout<<endl;
                    flag=0;
                }
                if(j==y&&flag==1)
                    cout<<endl;
            }
        }
        cout<<"Down"<<endl;
        for(int i=1; i<=x; i++)
        {
            int flag=0;
            for(int j=1; j<=y; j++)
            {
                if (a[i][j] != 0)
                {
                    printf("%3d.", a[i][j]);
                    for (int k=i; k <= x; k++)
                    {
                        if (s[k][j] == '*')
                        {
                            flag=0;
                            cout << endl;
                            break;
                        }
                        else
                        {
                            flag=1;
                            cout << s[k][j];
                        }
                        a[k][j]=0;
                    }
                    if(flag==1)
                        cout << endl;
                }
            }
        }
    }
    return 0;
}

Crossword Answers -------行与列按序输出的更多相关文章

  1. mysql sql语句:行转列问题

    存在表score,记录学生的考试成绩,如下图所示: 现要求以 学生姓名,语文,数学,英语 这种格式显示学生成绩,如下图所示 具体步骤如下: 1.首先,使用case when函数输出单个课程的成绩 ca ...

  2. 螺旋填数:读入两个整数m,n,输出一个m行n列的矩阵,这个矩阵是1~m*n这些自然数按照右、下、左、上螺旋填入的结果。

    package Day8_06; /*读入两个整数m,n,输出一个m行n列的矩阵,这个矩阵是1~m*n这些自然数按照右.下.左.上螺旋填入的结果. * 例如读入数字4,5,则输出结果为: * 1 2 ...

  3. 【C语言】请输入一个n(n<=10)并输出一个n行n列的杨辉三角

    应用二维数组的知识 杨辉三角特点: 1.第一列和对角线的元素全部为1 2.其他元素等于上一行的当前列的值和上一行中当前列前边一列的值之和 #include<stdio.h> #define ...

  4. poj 1888 Crossword Answers 模拟题

    Crossword Answers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 869   Accepted: 405 D ...

  5. Oracle行转列、列转行的Sql语句总结

    多行转字符串 这个比较简单,用||或concat函数可以实现  SQL Code  12    select concat(id,username) str from app_userselect i ...

  6. Oracle行转列、列转行的Sql语句总结(转)

    多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_userselect id||username str f ...

  7. SQL2005语句实现行转列,列转行

    在做报表时,经常需要将数据表中的行转列,或者列转行,如果不知道方法,你会觉得通过SQL语句来实现非常难.这里,我将使用pivot和unpivot来实现看似复杂的功能.这个功能在sql2005及以上版本 ...

  8. SQL Server 行转列重温

    转载自http://www.cnblogs.com/kerrycode/ 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER ...

  9. mysql行转列、列转行示例

    最近在开发过程中遇到问题,需要将数据库中一张表信息进行行转列操作,再将每列(即每个字段)作为与其他表进行联表查询的字段进行显示. 借此机会,在网上查阅了相关方法,现总结出一种比较简单易懂的方法备用. ...

随机推荐

  1. 关于JavaScript函数

    object.defineProperty()函数 再学习这个函数之前,我们先创建一个object对象 var person = {} person.name = "junlebao&quo ...

  2. SpringBoot--日期格式化

    1.为了统一转转,可以使用日期格式化类 package com.example.demo.resource; import com.fasterxml.jackson.datatype.jsr310. ...

  3. javamelody对Java Application进行监控

    前面写过对于webapp,用javamelody来监控.分析性能是挺方便的:那要对普通的java应用进行监控,只需要在应用上启动一个嵌入式web容器就可以了. javamelody里面的war包就用了 ...

  4. 队列的顺序存储与链式存储c语言实现

    一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表. 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环. 循环队列状态: 初始时:Q.front=Q.rear=0 ...

  5. JAVA设计模式 4【创建型】理解建造者模式

    Hello,又是拖了几天更,实在是忙的要死,有时候忙累了,真的就是倒头睡的那种,刚好今天闲下来了.今天来更新一篇建造者模式. 其实建造者模式,我们已经在上一节已经有了解过了.只不过是上一节没有提到这样 ...

  6. lambda表达式与函数式(FunctionalInterface)接口

    一.lambda表达式 lambda表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).使用它可以写出更简洁.更 灵活的代码. ...

  7. (私人收藏)蓝色夜空背景的通用商务PPT模板

    蓝色夜空背景的通用商务PPT模板 https://pan.baidu.com/s/1tsmPEdE5gjDDSxIyMDJGCA0m28

  8. (私人收藏)蓝色抽象科技感工作计划PPT模板

    蓝色抽象科技感工作计划PPT模板 https://pan.baidu.com/s/16iFYH94dVXp_izksVMGMBg0ozp

  9. unicode键盘编码表

    键盘uniCode编码 功能键:       8 ==>   Backspace             9 ==>   Tab             12==>   Clear ...

  10. C++栈(stack)、队列(queue)、链表(list)的常用函数

    C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一 ...