目录
1. WERTYU
【题目描述】
把手放在键盘上时,稍不注意就会往右错一位。这样的话,Q会变成W,J会变成K等。输入一个错位后敲出的字符串,输出打字员本来想打出的句子。
提示:空格不变,如果按下的是最左边的键也不变。
键盘布局为:
`1234567890-=
QWERTYUIOP[]\
ASDFGHJKL;'
ZXCVBNM,./
【输入格式】
一行表示打错的句子。(英文字母均为大写)
【输出格式】
一行表示打字员原本想打的句子。
【输入样例】
O S, GOMR YPFSU/
【输出样例】
I AM FINE TODAY.
示例代码:
#include <stdio.h>
#include <iostream>
using namespace std;
const char *str= "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";//将键盘顺序放入字符串数组中,其中斜杠要用转义字符//
int main()
{
char c;
int i;
while ((c = getchar()) != EOF) //键盘输入
{
for (i = 0; str[i] && str[i] != c; i++);
if ((str[i]=='`')||(str[i]=='Q')||(str[i]=='A')||(str[i]=='Z')) //如如果按下的是最左边的键不变。
putchar(c);
else if(str[i]) putchar(str[i-1]); //否则如果在str中找到了匹配字符,输出错位的字符
}
return 0;
}
2. n按规律转换为1
【题目描述】
给你一个数n(0 < n < 1,000,000 ) ,n遵循下面的规律:
当n=1,n = 1;
当n为偶数, n = n/2;
当n为奇数, n = 3*n+1。
自定义一个函数cal_step(int n),输入n,按上述规律最后转为1。输出每次变化的值,并计算转换的次数。
【输入格式】
一行一个整数 n
【输出格式】
第一行输出每次操作后得到的数,中间用空格分隔。
第二行输出一个整数表示操作总次数。
【输入样例】
10
【输出样例】
5 16 8 4 2 1
6
注意: 第一行行尾有一个空格
示例代码:
#include <iostream>
using namespace std;
int globalvariable=0;//定义一个全局变量计数
int cal_step(int n)
{
if (n==1)
{
cout<<endl;
return 0;
}
globalvariable++;
if (n%2==0)
{
cout<<n/2<<" ";
return cal_step(n/2);//递归调用,继续重新执行函数
}
else if (n%2==1)
{
cout<<(3*n+1)<<" ";
return cal_step(3*n+1);//递归调用,继续重新执行函数
}
return 0;
}
int main()
{
int n;
cin>>n;
cal_step(n);
cout<<globalvariable<<endl;
return 0;
}