4-字元轉換及所在位置

outer_star發表於2018-08-04

字元矩陣翻譯

輸入n和m,代表這個字元矩陣的行和列數,然後在接下來的n行,每行輸入一個含有m個字元的字串。要求將這個字元矩陣中的每一個字元,轉換為對應的字元。

轉換規則為:

對於大寫字母’A’-’Z’,分別轉換為0-25

對於小寫字母’a’-’z’,分別轉換為26-51

對於其他字元,全部轉換為’X’,大寫的’X’

然後

1.輸出這個轉換後的字元矩陣

2.輸出轉換後X的數目,另外再按照行優先的順序,輸出第一個X所在的行列(每個字元算一個位置,例如26X,則X是第一行第三列) 行列標均從1開始

注意:題目滿足轉換後一定存在至少一個’X’.

例如輸入:

2 3

acZ

@2z

輸出為:

262825

XX51

2 2 1


程式碼1:(自己寫的):

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    int n,m,tem,x=0,cc=0,rr=0;
    char c;
    cin>>n>>m;
    getchar();
    for(int i=1;i<=n;i++)
    {
        tem=0;
        for(int j=1;j<=m;j++)
        {
            c=getchar();
            if(c>='A'&&c<='Z')
                if((c-'A')>=10)
                {
                    printf("%d%d",(c-'A')/10,(c-'A')%10);
                    tem+=2;
                }
                else
                {
                    printf("%d",c-'A');
                    tem++;
                }
            else if(c>='a'&&c<='z')
                {
                    printf("%d%d",(c-'a'+26)/10,(c-'a'+26)%10);
                    tem+=2;
                }
                else
                {
                    printf("X");
                    x++;
                    if(x==1)
                    {
                        cc=i;
                        rr=tem+1;
                    }
                }
        }
        getchar();
        printf("\n");
    }
        printf("%d ",x);
        printf("%d %d",cc,rr);
    return 0;
}

程式碼2:(西交wrong):

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>

using namespace std;
const int maxn = 100000;
typedef pair<int,int> P;
int main()
{
    int n,m,rr,cc,tmp,cot=0;
    char c;
    bool first=0; //0還未出現X 1已經出現X
    cin>>n>>m;
    getchar();
    for(int i=1;i<=n;i++)
    {
        tmp=0;
        for(int j=1;j<=m;j++)
        {
            c=getchar();
            if(c>='A'&&c<='Z')
            {
                if(c-'A'<=9) tmp++;//當前行已經轉換之後的字元個數
                else tmp+=2;
                printf("%d",c-'A');
            }
            else
                if(c>='a'&&c<='z')
                {
                    printf("%d",c-'a'+26);
                    tmp+=2;
                }
                else
                {
                    printf("X");
                    cot++;
                    if(first==0)//'X'還沒有出現
                        {rr=i;cc=tmp+1;first=1;}//'X'已經出現
                }
        }
        getchar();
        printf("\n");
    }
    cout<<cot<<" "<<rr<<" "<<cc<<endl;
   return 0;
}

(感謝西交wrong學長提供以上題目練習)

相關文章