zoukankan      html  css  js  c++  java
  • UVa-227-谜题

    这题的话,我们读入的时候,可以用scanf单个读入字符,也可以用getchar函数来读入。
    scanf
    scanf读入串字符的时候,遇到空格、回车和TAB等空白字符就会停止读入,但是如果读入单个字符就不会出现读入结束的情况,因为,我们就是用scanf函数来读入单个字符的,读入结果很理想。
    getchar
    如果是getchar的话,getchar本身就是读入字符,所以遇到回车和空格并没有什么问题。
    注意

    1. 操作可以是多行的,所以注意对换行的处理
    2. 操作字符串里面读入至零之后,后面的回车要用getchar吸收,不然就作为下一组的第一个数据被读入了
    3. 对于操作我们一定要把所有的都读完,不能因为越界,就输出,然后中断读入,我们可以设置标记为否,然后一直读入,读完不做操作就行了
    4. getchar的速度快于scanf的速度
    5. PE问题,每个谜题的输入之间要有一个空行,第一行之前不要

    getchar()版

    #include <stdio.h>
    char puzz[7][7];
    int main()
    {
    	int br,bc,er,ec,flag,cnt=1;
    	char ch;
    	while ((puzz[0][0]=getchar())!=EOF&&puzz[0][0]!='Z') {
    		for (int i=0;i<5;i++) {
    			for (int j=0;j<6;j++) {
    				if (i||j) puzz[i][j]=getchar();
    				if (puzz[i][j]==' ') {
    					br=i;er=i;
    					bc=j;ec=j;
    				}
    			}
    		}
    		flag=1;
    		while ((ch=getchar())!=EOF&&ch!='0') {
    			if (ch=='
    ') continue;
    			if (flag==1) {
    				switch (ch) {
    					case 'A':
    						er--;
    						break;
    					case 'B':
    						er++;
    						break;
    					case 'L':
    						ec--;
    						break;
    					case 'R':
    						ec++;
    						break;
    					default:
    						flag=0;
    						break;
    				}
    				if (flag==0||er<0||er>4||ec<0||ec>4) {
    					flag=0;
    					continue;
    				}
    				puzz[br][bc]=puzz[er][ec];
    				puzz[er][ec]=' ';
    				br=er;
    				bc=ec;
    			}
    		}
    		getchar();
    		if (cnt!=1) {
    			printf("
    ");
    		}
    		printf("Puzzle #%d:
    ",cnt++);
    		if (flag==1) {
    			for (int i=0;i<5;i++) {
    				for (int j=0;j<6;j++) {
    					printf("%c",puzz[i][j]);
    					if (j<4) printf(" ");
    				}
    			}	
    		}
    		else printf("This puzzle has no final configuration.
    ");
    	}
    	return 0;
    }
    

    scanf()版

    #include <stdio.h>
    char puzz[7][7];
    int main()
    {
    	int br,bc,er,ec,flag,cnt=1;
    	char ch;
    	while (scanf("%c",&puzz[0][0])&&puzz[0][0]!='Z') {
    		for (int i=0;i<5;i++) {
    			for (int j=0;j<6;j++) {
    				if (i||j) scanf("%c",&puzz[i][j]);
    				if (puzz[i][j]==' ') {
    					br=i;er=i;
    					bc=j;ec=j;
    				}
    			}
    		}
    //		for (int i=0;i<5;i++) {
    //			for (int j=0;j<6;j++) {
    //				printf("%c",puzz[i][j]);
    //			}
    //		}
    		flag=1;
    		while (scanf("%c",&ch)&&ch!='0') {
    			if (ch=='
    ') continue;
    			if (flag==1) {
    				switch (ch) {
    					case 'A':
    						er--;
    						break;
    					case 'B':
    						er++;
    						break;
    					case 'L':
    						ec--;
    						break;
    					case 'R':
    						ec++;
    						break;
    					default:
    						flag=0;
    						break;
    				}
    				if (flag==0||er<0||er>4||ec<0||ec>4) {
    					flag=0;
    					continue;
    				}
    				puzz[br][bc]=puzz[er][ec];
    				puzz[er][ec]=' ';
    				br=er;
    				bc=ec;
    			}
    		}
    		getchar();
    		if (cnt!=1) {
    			printf("
    ");
    		}
    		printf("Puzzle #%d:
    ",cnt++);
    		if (flag==1) {
    			for (int i=0;i<5;i++) {
    				for (int j=0;j<6;j++) {
    					printf("%c",puzz[i][j]);
    					if (j<4) printf(" ");
    				}
    			}	
    		}
    		else printf("This puzzle has no final configuration.
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    LVS-NAT模式的配置详解
    流处理与消息队列------《Designing Data-Intensive Applications》读书笔记16
    流式计算与计算抽象化------《Designing Data-Intensive Applications》读书笔记15
    MapReduce与批处理------《Designing Data-Intensive Applications》读书笔记14
    分布式系统的一致性算法------《Designing Data-Intensive Applications》读书笔记13
    线性一致性与全序广播------《Designing Data-Intensive Applications》读书笔记12
    分布式系统的烦恼------《Designing Data-Intensive Applications》读书笔记11
    猫眼电影和电影天堂数据csv和mysql存储
    爬虫——requests.get爬虫模块参数
    机器学习——数据预处理
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10350146.html
Copyright © 2011-2022 走看看