问题:
小明让同学传纸条给小丽,纸条上写着M$pszi$y。小丽接到会心一笑,大家却不知所云。他们俩的花招瞒不过老师,给你一个程序,输入M$pszi$y,输出的就是小明的真实意思!
老师提供的代码:
#include <iostream> //预处理指令。
#include <cstdio>
using namespace std; //使用C++的命名空间 std。
int main() //函数首部。
{
char ch; //定义一个字符变量ch。
while((ch=getchar())!='\n') //while语句执行,从键盘输入任意的字符直到输入回车结束循环。
{
putchar(ch-4); //输出ASCII值减去4对应的字符。
}
return 0;
}
运行结果:
看来小明和小丽是早恋了。(括弧笑)
问题拓展一:因为他们俩人的“加密”手段泄露,决定纸条由人传,加密数字在(1-9)用两人约好的手势传。所以在解密前,需要将加密数字提前输入。请编出一个符合条件的程序。
代码:
/*
*copyright (c) 2014,烟台大学计算机学院
*all rights reserved.
*文 件 名 : 解密问题.cpp
*作 者 :张 鹏
*完成日期 :2014年10月30号
*版 本 号 :v1.1
*
*问题描述 :输入一串字符对其解密。
*输入描述 :一个数字和八个字符,数字代表加密使用的数字。
*程序输出 :八个字符,代表小明真实意思。
*/
#include <iostream> //预处理指令。
#include <cstdio>
using namespace std; //使用C++的命名空间 std。
int main() //函数首部。
{
int i; //声明一个变量i为整型,i代表加密使用的数字。
cin>>i; //从键盘输入i的值i为1-9的整数。
char ch; //定义一个字符变量ch。
while (10>i>0) //当i符合条件时候执行语句。
{
while((ch=getchar())!='\n') //while语句执行,从键盘输入任意的字符直到输入回车结束循环。
{
putchar(ch-i); //输出ASCII值减去4对应的字符。
}
if ((ch=getchar())=='\n')
break; //if语句执行,使得解密后跳出循环。
}
return 0; //执行返回语句,技术程序。
}
运行结果:
问题拓展二:
小刚常帮着传纸条,想知道两人的秘密,但不知道加密数字,于是悄悄的写了一个程序,可以列出所有可能的情况。例,输入M$pszi$y,多行输出必然有一行是......。你就是小刚,写出这个程序吧。
代码:
/*
*copyright (c) 2014,烟台大学计算机学院
*all rights reserved.
*文 件 名 : 解密问题.cpp
*作 者 :张 鹏
*完成日期 :2014年10月30号
*版 本 号 :v1.2
*
*问题描述 :输入一串字符对其解密。
*输入描述 :八个字符。
*程序输出 :一系列八个字符,其中有一组代表小明真实意思。
*/
#include <iostream> //预处理指令。
#include <cstdio>
using namespace std; //使用C++的命名空间 std。
int main() //函数首部。
{
char ch; //定义一个字符变量ch。
int i; //定义变量i为整型。
while((ch=getchar())!='\n') //while语句执行,从键盘输入任意的字符直到输入回车结束循环。
{
for (i=1; i<=10; ++i)
{
putchar(ch-i); //输出字符所有的可能原字符。
}
cout<<endl; //输出换行。
}
return 0; //执行返回语句,结束程序。
}
运行结果:
知识点与学习心得:
2个拓展题都让我想了好久,第一个想怎么解密完就结束程序,第二个想如何一次输出10种结果。挺费脑子的。