一、统计指定范围里的数
给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。
时间限制:1000
内存限制:65536
输入
第一行1个整数n、,分别表示序列的长度。(0 < n ≤ 10000) 第二行n个正整数,表示序列里的每一个数,每个数小于等于10000000 第三行2个整数L、R,分别表示区间的左端点,区间的右端点。(1 ≤ L ≤ R ≤ 1000000)
输出
输出一个整数,表示序列中大于等于L且小于等于R的数的个数。
样例输入
5
11 8 1 10 16
1 10
样例输出
3
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
int L,R;
cin>>L>>R;
int sum=0;
for(int i=0;i<n;i++){
if(a[i]>=L&&a[i]<=R){
sum++;
}
}
cout<<sum;
return 0;
}
二、按照个位数排序
对于给定的正整数序列,按照个位数从小到大排序,个位数相同的按照本身大小从小到大排序。
输入
第一行1个整数n,表示序列的大小。( 0 < n ≤ 1000) 第二行n个正整数,表示序列的每个数,每个数不大于100000000。
输出
输出按照题目要求排序后的序列
样例输入
6
17 23 9 13 88 10
样例输出
10 13 23 17 88 9
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
long long a[n],b[n];
for(int i=0;i<n;i++){
cin>>a[i];
b[i]=a[i]%10;
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(b[i]>b[j]){
swap(b[i],b[j]);
swap(a[i],a[j]);
}else if(b[i]==b[j]){
if(a[i]>a[j]){
swap(a[i],a[j]);
}
}
}
}
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
三、过滤多余的空格
一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
时间限制:1000
内存限制:65536
输入
一行,一个字符串(长度不超过200),句子的头和尾都没有空格。
输出
过滤之后的句子。
样例输入
Hello world.This is c language.
样例输出
Hello world.This is c language.
#include<iostream>
using namespace std;
int main(){
char ch[201];
cin.getline(ch,201);//含空格输入
int i=0;
int flag=0;//输出第一个空格标志
while(ch[i]!='\0'){//判断字符串是否结束标志
if(ch[i]==' '){
if(flag==0)
cout<<" ";
flag++;
}else{
cout<<ch[i];
flag=0;
}
i++;
}
return 0;
}
四、图像叠加
给出两幅相同大小的黑白图像(用0-1矩阵)表示,0表示白点,1表示黑点,求两幅图像叠加后的图像。
说明:若两幅图像在相同位置上的像素点都是白色,叠加后为白色,否则为黑色。
时间限制:1000
内存限制:65536
输入
第一行包含两个整数m和n,表示图像的行数和列数,中间用单个空格隔开。1 <= m <= 100, 1 <= n <= 100。 之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。 之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。
输出
m行,每行n个整数,表示叠加后黑白图像上各像素点的颜色。
样例输入
3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1
样例输出
1 1 1
0 0 1
1 1 1
#include<iostream>
using namespace std;
int main(){
int m,n;
cin>>m>>n;
int a[m][n];
int b[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>b[i][j];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(a[i][j]==0&&b[i][j]==0){
cout<<0<<" ";
}else{
cout<<1<<" ";
}
}
cout<<endl;
}
return 0;
}
五、出书最多
假定图书馆新进了m(10 ≤ m ≤ 999)本图书,它们都是由n(1 ≤ n ≤ 26)个作者独立或相互合作编著的。假设m本图书编号为整数(1到999),作者的姓名为字母('A'到'Z'),请根据图书作者列表找出参与编著图书最多的作者和他的图书列表。
时间限制:1000
内存限制:65536
输入
第一行为所进图书数量m,其余m行,每行是一本图书的信息,其中第一个整数为图书编号,接着一个空格之后是一个由大写英文字母组成的没有重复字符的字符串,每个字母代表一个作者。输入数据保证仅有一个作者出书最多。
输出
输出有多行: 第一行为出书最多的作者字母; 第二行为作者出书的数量; 其余各行为作者参与编著的图书编号(按输入顺序输出)。
样例输入
11
307 F
895 H
410 GPKCV
567 SPIM
822 YSHDLPM
834 BXPRD
872 LJU
791 BPJWIA
580 AGMVY
619 NAFL
233 PDJWXK
样例输出
P
6
410
567
822
834
791
233
#include<iostream>
using namespace std;
struct book{
int no;//图书编号
string name;//作者姓名
};
book b[1000];
int main(){
int m;
cin>>m;
int js[26];
for(char i='A';i<='Z';i++){
js[i]=0;//记录参与编著的次数
}
for(int i=0;i<m;i++){
cin>>b[i].no>>b[i].name;
for(int j=0;j<b[i].name.length();j++){
js[b[i].name[j]]++;
}
}
char res;//出书最多的作者字母
int max=0;
for(char i='A';i<='Z';i++){
if(js[i]>max){
max=js[i];
res=i;
}
}
int sum=0;//作者出书的数量
for(int i=0;i<m;i++){
for(int j=0;j<b[i].name.length();j++){
if(b[i].name[j]==res){
sum++;
}
}
}
cout<<res<<endl;
cout<<sum<<endl;
for(int i=0;i<m;i++){
for(int j=0;j<b[i].name.length();j++){
if(b[i].name[j]==res){
cout<<b[i].no<<endl;
continue;
}
}
}
return 0;
}