C/C++之(三)洛谷刷题基础

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。

唯有热爱,可抵岁月漫长,唯有热爱,不畏世间无常!

P1428 小鱼比可爱


 

题目描述

人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。

输入格式

第一行输入一个正整数 nn,表示鱼的数目。

第二行内输入 nn 个正整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度 a_iai​。

输出格式

一行,输出 nn 个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。

输入输出样例

输入 #1复制

6
4 3 0 5 1 2

输出 #1复制

0 0 0 3 1 2

说明/提示

对于 100\%100% 的数据,1 \leq n\leq 1001≤n≤100,0 \leq a_i \leq 100≤ai​≤10。

#include 
using namespace std;
int main()
{
	int n, i, j;
	cin >> n;
	int a[n];
	for (i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	for (i = 0; i < n; i++)
	{
		int count = 0;
		for (j = 0; j < i; j++)
		{
			if (a[j] < a[i])
			{
				count++;
			}
		}
		cout << count << " ";
	}
}

 

P1427 小鱼的数字游戏


 

题目描述

小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_iai​(长度不一定,以 00 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。

输入格式

一行内输入一串整数,以 00 结束,以空格间隔。

输出格式

一行内倒着输出这一串整数,以空格间隔。

输入输出样例

输入 #1复制

3 65 23 5 34 1 30 0

输出 #1复制

30 1 34 5 23 65 3

说明/提示

数据规模与约定

对于 100\%100% 的数据,保证 0 \leq a_i \leq 2^{31} - 10≤ai​≤231−1,数字个数不超过 100100。

#include
using namespace std;
int main(){
	int i,n[100],j=1;
	for(i=0;i<100;i++){
		cin >> n[i];
		if(n[i]==0){
			break;
		}
		j=i;
	}
	for(i=j;i>=0;i--){
		cout << n[i] << " ";
	}
} 

 

P1047 [NOIP2005 普及组] 校门外的树


题目描述

某校大门外长度为 ll 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 ll 的位置;数轴上的每个整数点,即 0,1,2,\dots,l0,1,2,…,l,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

输入格式

第一行有两个整数,分别表示马路的长度 ll 和区域的数目 mm。

接下来 mm 行,每行两个整数 u, vu,v,表示一个区域的起始点和终止点的坐标。

输出格式

输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。

输入输出样例

输入 #1复制

500 3
150 300
100 200
470 471

输出 #1复制

298

说明/提示

【数据范围】

  • 对于 20\%20% 的数据,保证区域之间没有重合的部分。
  • 对于 100\%100% 的数据,保证 1 \leq l \leq 10^41≤l≤104,1 \leq m \leq 1001≤m≤100,0 \leq u \leq v \leq l0≤u≤v≤l。

【题目来源】

NOIP 2005 普及组第二题

#include 
using namespace std;
int main()
{
	int l, m, count = 0, x, y, i;
	cin >> l >> m;
	int a[10010]={0};
	while (m--)
	{
		cin >> x >> y;
		for (i = x; i <= y; i++)
		{
			if (a[i] == 0)
			{
				a[i] = 1;
			}
		}
	}
	for (i = 0; i <= l; i++)
	{
		if (a[i] == 0)
		{
			count++;
		}
	}
	cout << count;
}

 

P5733 【深基6.例1】自动修正


题目描述

大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 100100 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。

输入格式

输入一行,一个字符串。

输出格式

输出一个字符串,即将原字符串中的所有小写字母转化为大写字母。

输入输出样例

输入 #1复制

Luogu4!

输出 #1复制

LUOGU4!
#include
using namespace std;
int main(){
	string a;
	int i;
	cin >> a;
	for(i=0;i='a'&&a[i]<='z'){
			a[i]-=32;
		}
	}
	cout << a;
} 

 

P1765 手机


题目描述

一般的手机的键盘是这样的:

C/C++之(三)洛谷刷题基础_第1张图片

要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x。0 键按一下会出一个空格。

你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。

输入格式

一行句子,只包含英文小写字母和空格,且不超过 200 个字符。

输出格式

一行一个整数,表示按键盘的总次数。

输入输出样例

输入 #1复制

i have a dream

输出 #1复制

23

说明/提示

NOI 导刊 2010 普及(10)

#include
using namespace std;
int main(){
    int a[26]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
    int count=0,i;
    string s;
    getline(cin,s);
    for(i=0;i

1.将每个字母需要点击几次存入数组

2.计算空格+字母

 

P1125 [NOIP2008 提高组] 笨小猴


题目描述

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!

这种方法的具体描述如下:假设 \text{maxn}maxn 是单词中出现次数最多的字母的出现次数,\text{minn}minn 是单词中出现次数最少的字母的出现次数,如果 \text{maxn}-\text{minn}maxn−minn 是一个质数,那么笨小猴就认为这是个 Lucky Word,这样的单词很可能就是正确的答案。

输入格式

一个单词,其中只可能出现小写字母,并且长度小于 100100。

输出格式

共两行,第一行是一个字符串,假设输入的的单词是 Lucky Word,那么输出 Lucky Word,否则输出 No Answer

第二行是一个整数,如果输入单词是 Lucky Word,输出 \text{maxn}-\text{minn}maxn−minn 的值,否则输出 00。

输入输出样例

输入 #1复制

error

输出 #1复制

Lucky Word
2

输入 #2复制

olympic

输出 #2复制

No Answer
0

说明/提示

【输入输出样例 1 解释】

单词 error 中出现最多的字母 \texttt rr 出现了 33 次,出现次数最少的字母出现了 11 次,3-1=23−1=2,22 是质数。

【输入输出样例 2 解释】

单词 olympic 中出现最多的字母 \texttt ii 出现了 11 次,出现次数最少的字母出现了 11 次,1-1=01−1=0,00 不是质数。

(本处原题面错误已经修正)

noip2008 提高第一题

#include 
using namespace std;
int main()
{
    int cnt[128]={0},count=0,max=127,min=127,www=0,flag,k;//初始化一个数组cnt[128]={0}  max,min
    char str[100];//输入字母
    int i;
    cin.getline(str,100);
    for(i = 0; str[i]!='\0'; ++i)
        cnt[str[i]]++;//统计单个字母总数
    sort(cnt,cnt+128);//排序   排序成1234   此时最后一位为maxn   第一位为minn
    for(i=128;i>=0;i--){
        if(cnt[i]!=0)
            if(min>cnt[i]){
                min=i;
            }
    }//找出第一位置
    www=cnt[max]-cnt[min];//求出maxn-minn
    k=(int)sqrt((double)www);//开平方减少循环次数
    for(i=2;i<=k;i++){
        if(www%i==0){
            break;
        }
    }//判断质数
    if(i>k&&www>=2){
        cout << "Lucky Word" << endl;
        cout << www;
    }
    else{
        cout << "No Answer" << endl;
        cout << "0";
    }
    return 0;
}

 

P1075 [NOIP2012 普及组] 质因数分解


题目描述

已知正整数 nn 是两个不同的质数的乘积,试求出两者中较大的那个质数。

输入格式

输入一个正整数 nn。

输出格式

输出一个正整数 pp,即较大的那个质数。

输入输出样例

输入 #1复制

21

输出 #1复制

7

说明/提示

1 \le n\le 2\times 10^91≤n≤2×109

NOIP 2012 普及组 第一题

#include
using namespace std;
int main(){
    int n,i,j;
    cin >> n;
    for(i=2;i<=n;i++){
        if(n%i==0){//一个质数i
            j=n/i;//另一个质数j
            break;
        }
    }//判断质数  既然n是质数之积   则n=i*j
    if(i>j){
        cout << i;
    }
    else{
        cout << j;
    }//大小
} 

 

P5743 【深基7.习8】猴子吃桃


题目描述

一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 nn 天早上起来一看,只剩下 11 个桃子了。请问小猴买了几个桃子?

输入格式

输入一个正整数 nn,表示天数。

输出格式

输出小猴买了多少个桃子。

输入输出样例

输入 #1复制

4

输出 #1复制

22

说明/提示

数据保证,1\le n\le201≤n≤20。

#include
using namespace std;
int main(){
    int n,k=1;
    cin >> n;
    while(n>1){
        k=(k+1)*2;
        n--;
    }
    cout << k;
} 

 1.最后剩一个 每次吃一半+1 逆推 即可

P5744 【深基7.习9】培训


题目描述

某培训机构的学员有如下信息:

  • 姓名(字符串)
  • 年龄(周岁,整数)
  • 去年 NOIP 成绩(整数,且保证是 55 的倍数)

经过为期一年的培训,所有同学的成绩都有所提高,提升了 20\%20%(当然 NOIP 满分是 600600 分,不能超过这个得分)。

输入学员信息,请设计一个结构体储存这些学生信息,并设计一个函数模拟培训过程,其参数是这样的结构体类型,返回同样的结构体类型,并输出学员信息。

输入格式

第一行输入一个正整数 nn,表示学员个数。

第二行开始往下 nn 行。每行首先是一个字符串表示学员姓名,再是一个整数表示学员年龄,再是一个整数为去年 NOIP 成绩。

输出格式

输出 nn 行,每行首先输出一个字符串表示学生姓名,再往后两个整数,表示经过一年的培训后学员的年龄和他们今年的 NOIP 成绩。以空格隔开。

输入输出样例

输入 #1复制

3
kkksc03 24 0
chen_zhe 14 400
nzhtl1477 18 590

输出 #1复制

kkksc03 25 0
chen_zhe 15 480
nzhtl1477 19 600

说明/提示

数据保证,1 \leq n \leq 51≤n≤5。年龄为 0 \sim 1000∼100(含 00 与 100100)的整数。成绩为 0 \sim 6000∼600(含 00 与 600600)的 55 的整倍数。

#include
using namespace std;
int main(){
	struct{
		string name;
		int age;
		int ni;
	}stu1;
	int n,i=1;
	cin >> n;
	while(i<=n){
		int ages=0,nis=0;
		cin >> stu1.name >> stu1.age >> stu1.ni;
		ages=stu1.age+1;
		nis=stu1.ni*0.2+stu1.ni;
		if(nis>=600){
			nis=600;
		}
		cout << stu1.name << " " << ages << " " << nis << endl;
		i++;
	}
} 

 

P5735 【深基7.例1】距离函数


题目描述

给出平面坐标上不在一条直线上三个点坐标 (x_1,y_1),(x_2,y_2),(x_3,y_3)(x1​,y1​),(x2​,y2​),(x3​,y3​),坐标值是实数,且绝对值不超过 100.00,求围成的三角形周长。保留两位小数。

对于平面上的两个点 (x_1,y_1),(x_2,y_2)(x1​,y1​),(x2​,y2​),则这两个点之间的距离 dis=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}dis=(x2​−x1​)2+(y2​−y1​)2​

输入格式

输入三行,第 ii 行表示坐标 (x_i,y_i)(xi​,yi​),以一个空格隔开。

输出格式

输出一个两位小数,表示由这三个坐标围成的三角形的周长。

输入输出样例

输入 #1复制

0 0
0 3
4 0

输出 #1复制

12.00

说明/提示

数据保证,坐标均为实数且绝对值不超过 100100,小数点后最多仅有 33 位。

#include
using namespace std;
int main(){
	double a[10];
	int i;
	double Perimeter=0.0,dis1=0.0,dis2=0.0,dis3=0.0;
	for(i=1;i<=6;i++){
		cin >> a[i]; 
	}
	dis1=sqrt((a[3]-a[1])*(a[3]-a[1])+(a[4]-a[2])*(a[4]-a[2]));
	dis2=sqrt((a[5]-a[3])*(a[5]-a[3])+(a[6]-a[4])*(a[6]-a[4]));
	dis3=sqrt((a[5]-a[1])*(a[5]-a[1])+(a[6]-a[2])*(a[6]-a[2]));
	Perimeter=dis1+dis2+dis3;
	printf("%.2lf",Perimeter);
}

冲冲冲!!!有没有报名第十四届蓝桥杯C/C++组参赛选手,共同努力!!!

你可能感兴趣的:(C/C++,知识学习,c++,开发语言,算法,比赛,蓝桥杯)