题目链接: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. 底层剖析Python深浅拷贝

    底层剖析Python深浅拷贝 拷贝的用途 拷贝就是copy,目的在于复制出一份一模一样的数据.使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不 ...

  2. Python3-Django-1.开发环境搭建

    官网 https://www.djangoproject.com/ 安装 http://www.runoob.com/django/django-install.html 创建项目 方式一(命令行): ...

  3. The main method caused an error: java.util.concurrent.ExecutionException: org.apache.flink.runtime.client.JobSubmissionException: Failed to submit JobGraph.

    在使用flink run命令提交任务可能会遇到如下错误: The program finished with the following exception: org.apache.flink.cli ...

  4. eclipse导入git项目

    复制项目的git路径 Eclipse打开 Git Repostitories 视图 弹出show view窗口 选择ok ,进入git repositories 视图窗口 我这里已经导入从我的git仓 ...

  5. 深入理解RocketMQ(一)---阅读源码准备

    本文主要描述使用Idea获取rocketMQ源码及源码的读取. 在演示搭建源码环境前,先简要描述一下RocketMQ的设计目标. 1.架构模式 和大多数消息中间件一样,采用的是发布订阅模式,基本组件包 ...

  6. Kafka 可视化监控和管理 UI工具评估

    以下内容,来自网络资料整理和个人安装使用结果.后续会持续更新

  7. Mariadb之半同步复制集群配置

    首先我们来了解下在mariadb/mysql数据库主从复制集群中什么是同步,什么是异步,什么是半同步:所谓同步就是指主节点发生写操作事件,它不会立刻返回,而是等到从节点接收到主节点发送过来的写操作事件 ...

  8. Sass简单、快速上手_Sass快速入门学习笔记总结

    Sass是世界上最成熟.稳定和强大的专业级css扩展语言 ,除了Sass是css的一种预处理器语言,类似的语言还有Less,Stylus等. 这篇文章关于Sass快速入门学习笔记. 资源网站大全 ht ...

  9. HotSpot的类模型(3)

    上一篇 HotSpot的类模型(2) 介绍了类模型的基础类Klass的重要属性及方法,这一篇介绍一下InstanceKlass及InstanceKlass的子类. 2.InstanceKlass类 每 ...

  10. day27 作业

    # 学校类 class School: #校区的名字:如"老男孩上海校区" #校区的地址:如"上海虹桥" def __init__(self,s_name,s_ ...