1. 百位数答应了
Description
m是个三位的整数,家里出了点小麻烦。个位数和十位数一直对百位数凡事都先露脸心怀不满,想出个办法,联手向百位数发起挑点。他们两个先相加,再减去百位数,以相减结果得到正值为傲。大度的百位数答应了:不就是陪着这两个无聊的家伙解闷嘛。请你编程序,帮他们一比高低。
Input
一个3位的整数m
Output
m的个位数和十位数之和减去百位数的结果
Sample Input
293
Sample Output
10
HINT
#include <iostream>
using namespace std;
int main( )
{
int m, a, b, c;
cin>>m;
a=m/100;
c=m%10;
b=(m%100)/10;
cout<<b+c-a<<endl;
return 0;
}
2. 复仇者联盟之关灯
Description
输入n(1~500)盏灯并编号,输入1~9(包含1和9)的数字m,灭掉编号中带m的数及m倍数的灯,最后输出亮出的灯的编号。
Input
灯数n,数字m
Output
剩下的亮的灯的编号(每个编号占一行)
Sample Input
30 3
Sample Output
1
2
4
5
7
8
10
11
14
16
17
19
20
22
25
26
28
29
HINT
#include <iostream>
using namespace std;
int main()
{
int t,m,n;
cin>>n>>m;
for(int i=1; i<n; ++i) //严格讲,这个参考答案中i<n是错的(正解i<=n)!坏事变好,详见后面的说明。
{
t=(i%m==0)+(i%10==m)+((i/10)%10==m)+((i/100)%10==m);
if(t==0)cout<<i<<'\n';
}
return 0;
}
说明:
因为老师在做答案时失误,导致测试数据中,没有使应该亮着的n灯点亮。不少同学在藏在暗处的测试数据前栽了跟头。但从这个题目中,让我们再次意识到测试边界的重要性,或者当出现问题时,对一般性况的处理发现不了问题,应该首先意识到边界(本题的边界就是1和n)上是否有问题。其实在这方面有所察觉的同学,应该能够及时调整。再一个坏事变好事的方面是,当一道题不顺利时,是否影响了后面的状态?锻炼了心理素质,这也是要的进步之一。
3. 复仇者联盟之数组成绩统计
Description
定义一个5行3列的二维数组,各行分别代表一名学生的高数、英语、C++成绩。再定义一个有5个元素的一维数组,用于存储每名学生的平均成绩。请输入学生的各门课成绩,输出带平均成绩的成绩单,以及所有学生平均成绩的平均值。
Input
15个整数,表示5名学生3科的成绩
Output
分5行显示每名学生的成绩及平均成绩
再显示所有学生平均成绩的平均值(保留两位小数)
Sample Input
97 78 87
78 63 68
73 81 85
91 87 88
76 81 89
Sample Output
97 78 87 87.33
78 63 68 69.67
73 81 85 79.67
91 87 88 88.67
76 81 89 82.00
81.47
HINT
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
int score[5][3]; //保存成绩的数组
double average[5]; //保存平均成绩的数组
int i,j;
double sum;
//输入成绩
for(i=0; i<5; i++)
for(j=0; j<3; j++)
cin>>score[i][j];
//计算每位同学的平均成绩,保存到数组average中
for(i=0; i<5; i++)
{
sum=0;
for(j=0; j<3; j++)
sum+=score[i][j];
average[i]=sum/3.0;
}
//输出带平均成绩的成绩单
cout<<setiosflags(ios::fixed)<<setprecision(2);
for(i=0; i<5; i++)
{
for(j=0; j<3; j++)
cout<<score[i][j]<<" ";
cout<<average[i]<<endl;
}
//计算平均成绩的平均值并输出
sum=0;
for(i=0; i<5; i++)
sum+=average[i];
cout<<sum/5.0<<endl;
return 0;
}
4. 找出素数
Description
输入若干个正整数,将其中的素数输出来。
请在下面的代码基础上完成本题,只提交你编写的部分
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n);
int main( )
{
int n;
while(cin>>n)
{
if(isPrime(n))
cout<<n<<endl;
}
return 0;
}
//下面实现isPrime函数,其功能是判断n是否是素数。
//若是素数,返回true,否则,返回false
Input
个数不确定的正整数
Output
输入数据中的素数,一数一行,保持原来的顺序
Sample Input
83 5 12 363 137 307 31 87 126 490 300 358 28 239 286 69 25 94 7 336^Z
Sample Output
83
5
137
307
31
239
7
HINT
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n);
int main( )
{
int n;
while(cin>>n)
{
if(isPrime(n))
cout<<n<<endl;
}
return 0;
}
bool isPrime(int n)
{
bool prime=true;
int k=int(sqrt(n));
for(int i=2;i<=k;i++)
{
if(n%i==0)
{
prime=false;
break;
}
}
return prime;
}
5 逗逗泡泡的保密电文
Description
某电报局的电文保密的规律是将每个英文字母变成其后的第4个字母(很原始的那种啦),如A变成E,a变成e。最后四个字母(W,X,Y,Z或w,x,y,z)又变成前4个字母(A,B,C,D或a,b,c,d).非字母字符不变。输入一行字母,要求输出对应的加密后的文字
Input
一行字符串
Output
改变后的字符串
Sample Input
I am 20 years old.
Sample Output
M eq 20 cievw sph.
HINT
参考解答1
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char str[81];
gets(str);
int i=0;
while (str[i]!='\0')
{
if ((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
{
str[i]=str[i]+4;
if ((str[i]>'Z'&&str[i]<='Z'+4)||(str[i]>'z'&&str[i]<='z'+4))
str[i]=str[i]-26;
}
i++;
}
puts(str);
return 0;
}
参考解答2 :
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char c;
while ((c=getchar())!='\n')
{
if ((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{
c=c+4;
if ((c>'Z'&&c<='Z'+4)||(c>'z'&&c<='z'+4))
c=c-26;
}
cout<<c;
}
cout<<endl;
return 0;
}
6. 用数字造数字
Description
输入一个3位以上的整数,求其中最大的两个数字之和与最小的数字之和之间的差。例如:输入8729,输出8,即(9+8)-(2+7)=8,再如,输入24825,输出9,即(8+5)-(2+2)=9。
Input
一个3位以上的整数
Output
最大的两个数字之和与最小的数字之和之间的差
Sample Input
8729
Sample Output
8
HINT
将分离好的数字存储在数组中,再从数组中找出最大、次大值,以及最小、次小值。最坏的策略,将得到的数组排序后取头尾两个元素。
#include <iostream>
using namespace std;
int main( )
{
int n,arr[15],num=0;
int i, max1, max2, min1, min2, t;
cin>>n;
while(n>0)
{
arr[num++]=n%10;
n/=10;
}
//找最大和次大
for(i=0; i<num-1; i++) //参照冒泡排序思想,将最大交换到最后
{
if(arr[i]>arr[i+1])
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
for(i=0; i<num-2; i++) //参照冒泡排序思想,将次大交换到次后
{
if(arr[i]>arr[i+1])
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
max1=arr[num-1];
max2=arr[num-2];
//找最大和次大
for(i=0; i<num-1; i++) //参照冒泡排序思想,将最小交换到最后
{
if(arr[i]<arr[i+1])
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
for(i=0; i<num-2; i++) //参照冒泡排序思想,将次小交换到次后
{
if(arr[i]<arr[i+1])
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
min1=arr[num-1];
min2=arr[num-2];
cout<<max1+max2-min1-min2<<endl;
return 0;
}
=================== 迂者 贺利坚 CSDN博客专栏================= |== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==| |== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==| |== 我写的书——《逆袭大学——传给IT学子的正能量》 ==| ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 ===== |