c语言二级真题

目录

数组逆序重放

最长最短单词

统计误差范围内的数

有趣的跳跃

数字放大

内部元素之和

 满足条件的数的累加

偶数降序输出

字符统计

统计指定范围里的数

按照个位数排序


数组逆序重放
 

题目描述
将一个数组中的值按逆序重新存放。例如,原来的顺序为8 6 5 4 1,要求改为1 4 5 6 8。

输入格式

输入为两行:第一行数组中元素的个数n,第二行是n个整数,每两个整数之间用空格分隔。

输出格式

输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。

样例
输入样例

5

8 9 5 4 1

输出样例

1 4 5 9 8

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	int a[110];
	int n;
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i = n-1;i>=0;i--)
	{
		cout<<a[i]<<" ";
	}
	return 0;
}

最长最短单词
 

题目描述
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。

试输出第1个最长的单词和第1个最短单词。

输入格式

一行句子。

输出格式

第1行,第一个最长的单词。

第2行,第一个最短的单词。

样例
样例输入

I am studying Programming language C in Peking University

样例输出

Programming

I

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	char a[20000];
	char wlong[200];
	char wshort[200],word[200];
	int numlong=0,numshort=100;
	int i,n,l,k,cl;
	l=0;
	k=0;
	cin.getline(a,20000);
	n=strlen(a);
	for(i=0;i<=n;i++)
	{
		if(a[i]!=' '&&a[i]!=','&&a[i]!=0)
		{
			l++;
			word[k]=a[i];
			k++;
		}
		if(a[i]==' '||a[i]==','||a[i]==0)
		{
			if(l>numlong)
			{
				numlong=l;
				strcpy(wlong,word);
			}
			if(l>0&&l<numshort)
			{
				numshort=l;
				strcpy(wshort,word);
			}
			l=0;
			k=0;
			for(cl=0;cl<=200;cl++)
				word[cl]='\0';
		}
		
	}
	cout<<wlong<<endl;
	cout<<wshort;
	return 0;
}

统计误差范围内的数

题目描述
统计一个整数序列中与指定数字m误差范围小于等于X的数的个数。

输入格式

输入包含三行:第一行为N,表示整数序列的长度(N<=100);第二行为N个整数,整数之间以一个空格分开;第三行包含2个整数,为指定的整数m,误差范围X。

输出格式

输出输出为N个数中与指定数字m误差范围小于等于X的数的个数。

样例
样例输入

5

1 2 3 4 5

3 1

样例输出

3

样例解释

提示样例中2,3,4都满足条件,故答案为3

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int a[110];
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	int m,x;
	cin>>m>>x;
	int sum = 0;
	for(int i = 0;i<n;i++)
	{
		if(a[i] < m+x)
		{
			sum++;
		}
	}
	cout<<sum;
	return 0;
}

有趣的跳跃
 

题目描述
在一个长度为n的数字序列中,如果相邻元素差的绝对值经过升序排序后正好是1~n-1,则认定该序列存在“有趣的跳跃”。

例如:数字序列1、4、2、3 的相邻数字差的绝对值分别为3、2、1,排序后是1、2、3,说明该序列存在着“有趣的跳跃”。

现在给你一个序列,请你判断该序列是否存在“有趣的跳跃”。

输入格式

第1 行为一个整数(不超过100000)。

接下来一行为个不超过100000 的整数。

输出格式

若存在,输出“yes”,否则输出“no”。

样例
样例输入:

4

1 4 2 3

样例输出:

yes

#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int a[110];
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	int sum = 0;
	for(int i = 0;i<n;i++)
	{
		if(a[i] >=1 || a[i] <= n-1)
		{
			sum++;
		}
	}
	if(sum>0)
	{
		cout<<"yes";
	}
	else
	{
		cout<<"no";
	}
	return 0;
}

数字放大

题目描述
给定一个整数序列以及放大倍数x,将序列中每个整数放大x倍后输出。

输入格式

包含三行:

第一行为N,表示整数序列的长度(N ≤ 100);

第二行为N个整数(不超过整型范围),整数之间以一个空格分开;

第三行包含一个整数(不超过整型范围),为指定的整数x。

输出格式

N个整数,为原序列放大之后的序列,整数之间以一个空格分开。

样例
样例输入

3

1 5 7

2

样例输出

2 10 14

#include <iostream>
#include<string.h>
using namespace std;
int main()
{
    int a[110];
    int n;
    cin>>n;
    for(int i = 0;i<n;i++)
    {
        cin>>a[i];
    }
    int x;
    cin>>x;
    for(int i = 0;i<n;i++)
    {
        cout<<a[i]*x<<" ";
    }
    return 0;
}

内部元素之和

题目描述
输入一个整数矩阵,计算位于矩阵内部的元素之和。所谓矩阵内部的元素,不在第一行和最后一行的元素以及第一列和最后一列的元素。

输入格式

第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。接下来输入的m行数据中,每行包含n个整数(每个数大于等于0,小于1000),整数之间以一个空格分开。

输出格式

输出对应矩阵的内部元素和

样例
样例输入

3 3

3 4 1

3 7 1

2 0 1

样例输出

7

#include <iostream>
#include<string.h>
using namespace std;
int main()
{
    int a[110];
    int n;
    cin>>n;
    for(int i = 0;i<n;i++)
    {
        cin>>a[i];
    }
    int x;
    cin>>x;
    for(int i = 0;i<n;i++)
    {
        cout<<a[i]*x<<" ";
    }
    return 0;
}

 满足条件的数的累加
 

题目描述
现有n个整数,将其中个位数为k的数进行累加求和。

输入格式

第一行两个整数n、k,以空格分隔。(0 < n < 1000, 0 ≤ k ≤ 9)第二行n个非负整数,以空格分隔,每个数不大于100000。

输出格式

输出满足题目要求的累加和。

样例
样例输入

10 7

2 5 7 17 11 18 4 27 1 7

样例输出

58

#include <iostream>
#include<string.h>
using namespace std;
int main()
{
    int a[110];
    int n,k;
    cin>>n>>k;
    for(int i = 0;i<n;i++)
    {
        cin>>a[i];
    }
    int sum = 0;
    for(int i = 0;i<n;i++)
    {
        if(a[i]%10 == k)
        {
            sum = sum + a[i];
        }
    }
    cout<<sum;
    return 0;
}

偶数降序输出
 

题目描述
给定一个长度为N(不大于500)的正整数序列,请将其中的所有偶数取出,并按降序输出。

输入格式

共2行:第1行为N;第2行为N 个正整数,其间用空格间隔。

输出格式

降序输出的偶数序列,数之间以空格间隔。数据保证至少有一个偶数。

样例
样例输入

10

1 3 2 6 5 4 9 8 7 10

样例输出

10 8 6 4 2

#include <iostream>
#include<string.h>
using namespace std;
int main()
{
    int a[110];
    int b[110];
    int n;
    cin>>n;
    for(int i = 0;i<n;i++)
    {
        cin>>a[i];
    }
    int s = 0;
    for(int i = 0;i<n;i++)
    {
        if(a[i]%2 == 0)
        {
            b[s] = a[i];
            s++;
        }
    }
    for(int i = 0;i<=s;i++)
    {
        if(b[i]<b[i+1])
        {
            int f = b[i];
            b[i] = b[i+1];
            b[i+1] = f;
        }
    }
    for(int i = 0;i<=s;i++)
    {
        cout<<b[i]<<" ";
    }
    return 0;
}

字符统计

题目描述
给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。

输入格式

输入包含一行,一个字符串,长度不超过1000。

输出格式

输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。

样例
样例输入

abbccc

样例输出

c 3 

#include <iostream>
#include<string.h>
using namespace std;
int main()
{
    int a[110];
    int b[110];
    int n;
    cin>>n;
    for(int i = 0;i<n;i++)
    {
        cin>>a[i];
    }
    int s = 0;
    for(int i = 0;i<n;i++)
    {
        if(a[i]%2 == 0)
        {
            b[s] = a[i];
            s++;
        }
    }
    for(int i = 0;i<=s;i++)
    {
        if(b[i]<b[i+1])
        {
            int f = b[i];
            b[i] = b[i+1];
            b[i+1] = f;
        }
    }
    for(int i = 0;i<=s;i++)
    {
        cout<<b[i]<<" ";
    }
    return 0;
}

统计指定范围里的数

题目描述
给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。

输入格式

第一行1个整数n、分别表示序列的长度。

第二行n个正整数,表示序列里的每一个数,每个数小于等于10000000。

第三行2个整数L、R,分别表示区间的左端点,区间的右端点。

输出格式

输出一个整数,表示序列中大于等于L且小于等于R的数的个数。

样例
样例输入

5

11 8 1 10 16

1 10

样例输出

3

#include <iostream>
#include<string.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[110];
    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>
#include<string.h>
using namespace std;
int main()
{
    int a[110];
    int n,j,temp;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        
        j=i-1;
        temp=a[i];
        while(j>=0 && (temp%10<a[j]%10||(temp%10==a[j]%10&&temp<a[j])))
        {
            a[j+1]=a[j];
            j--;
        }
        a[j+1]=temp;
    }
    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
    
    return 0;
}

哇塞😍大帅哥/大美女给我点赞了  今天的你真好看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值