YTUOJ-偵察員的密碼

不被看好的青春叫成長發表於2015-03-18

題目描述

偵察員小甲在被捕前在牆上寫了兩行文字(ASCII字元),其中包含了他獲取的敵人密碼,破譯員琪琪經過3天3夜終於找到了破解方法,請程式設計幫助琪琪計算密碼。
計算密碼方法:只保留兩行文字的數字,然後對兩行數字從左向右逐位相加,不足位補0,將每位所求和加70得到ASCII,再按照字元輸出就是密碼。
例如:以下兩行文字 
<mary303>and<kitty739>
!!76$$=(50){%;%}?>
提取數字逐位相加
  3  0  3  7   3  9
  7  6  5  0
=============
 10  6  8  7   3  9
逐位加70得到ASCII序列
 80 76 78 77 73 79
對應的密碼是  PLNMIO

輸入

兩行字元序列(每行不超過80個字元)

輸出

一行密碼

樣例輸入

<mary303>and<kitty739>
!!76$$=(50){%;%}?>

樣例輸出

PLNMIO

提示

 

程式碼如下:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
    char a[80],b[80],c[80],d[80];
    int n=0,m=0;
    memset(a,'0',80);
    memset(b,'0',80);
    memset(c,'0',80);
    memset(d,'0',80);
    gets(a);
    gets(b);
    int i=0;
    while (a[i]!='\0')
    {
        if (a[i]>='0'&&a[i]<='9')
        {
            c[n]=a[i];
            n++;
        }
        i++;
    }
    i=0;
    while (b[i]!='\0')
    {
        if (b[i]>='0'&&b[i]<='9')
        {
            d[m]=b[i];
            m++;
        }
        i++;
    }
    if (n<m)
        n=m;
    for (i=0;i<n;i++)
        cout<<char(int((c[i]+d[i]-2*48)+70));
    return 0;
}


執行結果:

 

這道題是我們上學期的期末考試最後一題,當時寫了很久自己都不知道怎麼寫的就AC了,昨天同學重新做了這道題後讓我幫她找BUG我居然鬧了個笑話,一時沒注意以為只要輸入數字就行了,一直在糾結輸入數字與數字之間的空格問題(如果同學給我的程式碼如果加空格的話空格前後就相當於兩個字串了)結果誤打誤撞找到了問題,就是不能接收空格。。。(她用的cin)...然後繼續做,換資料型別啊等等做了很久,但我無意間再看了一眼題目,這才發現原來題目是要輸入字串後提取數字進行運算。。。果斷用gets()。。。悲哀,看題的時候果然要仔細啊。

 

相關文章