目录
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;
}
3. 多项式求值
【题目描述】
给定一个多项式,以及变量的值,求多项式的值。
【输入格式】
输入为三行数据,第一行是多项式的项数n,第二行有n个数,是多项式从高到低的系数,第三行是变量x的值。
【输出格式】
一行一个数表示多项式的值
【输入样例】
3
1 2 1
2
【输出样例】
9
示例代码:
#include <iostream>
#include <cmath>
using namespace std;
void function(int n)
{
//多项式有n项
int num[n],x;
int sum=0;
for (int i=0;i<=n-1;i++)
{
cin>>num[i];//多项式系数
}
cin>>x;//变量x
for (int i=0;i<=n-1;i++)
{
sum+=num[n-i-1]*pow(x,i);//多项式求和,其中pow为幂函数
}
cout<<sum<<endl;
}
int main()
{
int n;
cin>>n;
function(n);
return 0;
}
4. 判断上三角函数
【题目描述】
输入4阶方阵a中的元素,如果a是上三角矩阵,输出"YES",否则,输出"NO"。(上三角矩阵,即主对角线以下的元素都为0,主对角线为从矩阵的左上角至右下角的连线)
【输入格式】
输入共四行,每行四个数表示一个四阶方阵
【输出格式】
按要求输出 YES 或 NO
【输入样例1】
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
【输出样例1】
NO
【输入样例1】
1 1 1 1
0 1 1 1
0 0 1 1
0 0 0 1
【输出样例1】
YES
示例代码:
#include <iostream>
using namespace std;
int main()
{
int num[4][4];
int flag=0;//标识符
for (int i=0;i<=3;i++)//输入矩阵
{
for (int j=0;j<=3;j++)
{
cin>>num[i][j];
}
}
for (int i=0;i<=3;i++)//判断是否是上三角矩阵
{
for (int j=0;j<=3;j++)
{
if (i>j)
{
if (num[i][j]==0) flag=1;
else flag=0;
}
}
}
if (flag==1)
{
cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
return 0;
}
5. 计算阶乘
【题目描述】
使用递归函数实现计算n!。
【输入格式】
一行一个整数 n
【输出格式】
第一行输出 n 第二行输出 n! 的表达式
【输入样例】
3
【输出样例】
3(注意要输出n)
3!=6
示例代码:
#include <iostream>
using namespace std;
int function(int n)
{
if (n==1) return 1;
else return (n*function(n-1));
}
int main()
{
int n;
cin>>n;
cout<<n<<endl;
cout<<n<<"!="<<function(n)<<endl;
return 0;
}
6. 计算平均成绩
【题目描述】
编写一个函数,该函数接受的一个长度为6的数组,数组存放6个学生的考试成绩,函数计算并返回平均成绩。在主函数中输入成绩并输出平均成绩。
【输入格式】
一行6个数
【输出格式】
一行一个实数表示平均成绩
【输入样例】
1 2 3 4 5 6
【输出样例】
3.5
示例代码:
#include <iostream>
using namespace std;
int main()
{
int num[6],sum=0;
float average;
for (int i=0;i<=5;i++)
{
cin>>num[i];
sum+=num[i];
}
average=sum/6.0;
cout<<average<<endl;
return 0;
}
7. 寻找第N个闰年
【题目描述】
给你一个正整数y表示开始的年份,再给你一个正整数N,请求出从开始年份起第N个闰年。
注意:如果开始年份y是闰年,那么认为开始年份后的第一个闰年就是y。
【输入格式】
一行两个整数分别表示开始年份和 N
【输出格式】
一行一个整数表示第 N 个闰年
【输入样例】
2005 25
【输出样例】
2108
示例代码:
#include <iostream>
using namespace std;
int main()
{
int year_start,n=1,res=0;
cin>>year_start>>n;
for (;;year_start++)//只定义循环步长
{
if((year_start%4==0&&year_start%100!=0)||(year_start%400==0))//如果是闰年
{
res++;//计数加一
}
if(res==n) break;//直至第n个闰年,强制退出循环
}
cout<<year_start<<endl;
return 0;
}
8. 判断素数
【题目描述】
输入一个正整数n,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)
【输入格式】
一行一个整数 n
【输出格式】
输出 YES 或 NO
【输入样例】
5
【输出样例】
YES
示例代码:
#include <iostream>
using namespace std;
void ifprime()
{
int flag=0,n;
cin>>n;
for (int i=1;i*i<n;i++)
{
if(n%i==0)
{
flag=0;
}
else flag=1;
}
if (flag==1)
{
cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
}
int main()
{
ifprime();
return 0;
}
9. 8进制转换为10进制
【题目描述】
从键盘中输入一个8进制数,将这个8进制数转换为10进制数并输出。
【输入格式】
一行一个8进制数
【输出格式】
一行输出转化后的10进制数
【输入样例】
456
【输出样例】
302
示例代码:
#include <iostream>
#include <cmath>
using namespace std;
int swicth(int n)
{
int num[100],sum=0,res=-1;
for(int i=0;n!=0;i++)
{
num[i]=n%10;
n/=10;
res++;
}//将八进制数拆分
for (int i=res;i>=0;i--)
{
sum+=pow(8,i)*num[i];
}//转化成10进制数
cout<<sum<<endl;
return 0;
}
int main()
{
int n;
cin>>n;
swicth(n);
return 0;
}
10. 6174问题
【题目描述】
假设你有一个各位数字互不相同的四位数,把所有数字从大到小排序后得到a,从小到大排序后得到b,然后用a-b换原来的数,并且继续操作。有趣的是这样操作了几次后会得到四位数6174,而对6174进行处理,为7641-1467=6174,回到了它自己。输入一个n位数(不一定是四位数),输出操作序列,直到第一次出现循环。输入保证在循环之前最多只会产生1000个整数。
注意:若输入0则无输出
【输入格式】
一行一个整数
【输出格式】
一行输出操作序列(包括一开始的数)
(注:序列中的每个数通过一个空格隔开。)
【输入样例1】
1234
【输出样例1】
1234 3087 8352 6174 6174
【输入样例2】
1234567
【输出样例2】
1234567 6419754 8319762 8639532 7529643 7419753 8429652 7619733 8439552 7509843 9529641 8719722 8649432 7519743 8429652
示例代码:
#include <iostream>
using namespace std;
int linemax(int n)//从大到小排序
{
int num[1000]={0},res=0;
for (int i=0;n!=0;i++)//剥离各项
{
num[i]=n%10;
n/=10;
res++;//记录有几项
}
res-=1;
//从大到小排序
for (int i=0;i<=res;i++)
{
for (int j=0;j<=res-i-1;j++)
{
int t;
if(num[j]<num[j+1])
{
t=num[j];
num[j]=num[j+1];
num[j+1]=t;
}
}
}
int sum=0;
sum=num[0];
for (int i=0;i<=res-1;i++)
{
sum=sum*10+num[i+1];
}
return sum;
}
int linemin(int n)//从小到大排序后的数
{
int num[1000]={},res=0;
for (int i=0;n!=0;i++)//剥离各项
{
num[i]=n%10;
n/=10;
res++;//记录有几项
}
res-=1;
//从小到大排序
for (int i=0;i<=res;i++)//冒泡排序
{
for (int j=0;j<=res-i-1;j++)
{
int t;
if(num[j]>num[j+1])
{
t=num[j];
num[j]=num[j+1];
num[j+1]=t;
}
}
}
int sum=0;
sum=num[0];
for (int i=0;i<=res-1;i++)
{
sum=sum*10+num[i+1];
}
return sum;
}
int main()
{
int n,n_result[1001];//定义一个数组来储存结果
int flag=0;
cin>>n;
cout<<n<<" ";//先输出自身
n_result[0]=linemax(n)-linemin(n);
cout<<n_result[0]<<" ";//再输出转换后的第一个数
for (int i=1;flag!=1;i++)//其中(flag!=0)是循环条件,如果flag标识为1,退出循环
{
n_result[i]=linemax(n_result[i-1])-linemin(n_result[i-1]);
cout<<n_result[i]<<" ";//每次转换后储存到n_result数组中,并输出
for (int j=0;j<i;j++)//判断是否会重复出现
{
if (n_result[i]==n_result[j])//如果重复出现
{
flag=1;//改变标识符
break;//退出循环
}
}
}
}
标签:输出,上机,int,样例,num,北科,格式,程序设计,输入
From: https://blog.csdn.net/m0_66717194/article/details/143766240