首页 > 其他分享 >UVA - 227

UVA - 227

时间:2023-03-07 21:55:46浏览次数:40  
标签:输出 ch int scanf mp 227 UVA getchar

Puzzle UVA - 227

题目大意

开始有一个5 * 5的网格,其中有一个格子是空的也就是空格键,其余都是字母,A->空格向上走;B->向下走;L->向左走;R->向右走,先输出"Puzzle #X:",越界就输出"This puzzle has no final configuration.",如果没有就输出网格表,注意!每个输出之间都要有一行空行
思路:最开始,感觉还是蛮简单的嘛,就是先把字母表确定下来,然后后面移动的字符一个一个判断,还能省一下一个装移动字符的数组,然后进行移动,用一下swap,敲来敲去,最后试一下案列,欸!输出都快不成样子了哭了,第一个案例输出时还是很正常的,然后就开始漏字符,而且有些还换行,考虑到用的是cin,网上查来查去,才发现是cin的问题,之前C语言的时候,scanf就不能读取空格和换行符,只能用getchar和gets,gets用于读取字符串,而且getchar用来读取单个字符,还有一种较麻烦的scanf,就是
#include<stdio.h>
int main()
{
	char arr[10];
	scanf("%[^\n]", arr);
	printf("%s", arr);
	return 0;
}
cin跟scanf差不多,都是不读空格,把最原始的东西忘了变成小白菜了,就算用getchar,还需要注意换行符,一不小心就读进去表格了,所以对于换行符该读取的位置需要考虑好
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a,b,flag,cnt;
    cnt = 1;
    char ch;

    while(1){
        ch = getchar();
        if(ch == 'Z')return 0;
        char mp[5][5];
        flag = 1;
        if(ch == ' ')a = 0,b = 0;

        mp[0][0] = ch;

        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                if(i||j){
                    ch = getchar();
                    if(ch == ' ')a = i,b = j;
                    mp[i][j] = ch;

                }
            }
            getchar();//吸收"\n"
        }

        string op;
        while(ch = getchar()){
            if(ch == '0')break;
            else op.push_back(ch);
        }
        getchar();//\n
        //暂时还没试(不是)出来不用另一个数组的ac方法
        
        // while((ch = getchar())&&ch != '0'){
        for(int i=0;i<op.size();i++){
            ch = op[i];
            int l = a,r = b;

            if(ch == 'A')a --;
            else if(ch == 'B')a ++;
            else if(ch == 'L')b --;
            else if(ch == 'R')b ++;
            
            if(a < 0||b < 0||a > 4||b > 4){
                flag = 0;
                break;
            }else swap(mp[l][r],mp[a][b]);
        }

        if(cnt != 1)cout << endl;//如果放在后面,无法判断是不是最后一个案例,所以放在前面判断
        cout << "Puzzle #" << cnt << ":" << endl;
        cnt++;
        
        if(flag){
            for(int i=0;i<5;i++){
                for(int j=0;j<5;j++){
                    if(j)cout << " ";
                    cout << mp[i][j];
                }
                cout << endl;
            }
        }else{
            cout << "This puzzle has no final configuration." << endl;
        }
    }
    return 0;
}
第一次写题解,还是个白菜中的白菜,各位大佬口下留情

标签:输出,ch,int,scanf,mp,227,UVA,getchar
From: https://www.cnblogs.com/electrojay/p/17189839.html

相关文章