c语言金典100题“从入门到放弃”10-15

过滤多余的空格

描述

一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。

输入

输入1行:

一行,一个字符串(长度不超过 1000),句子的头和尾都没有空格。

输出

输出1行:

过滤多个空格之后的字符串

输入样例 1

复制代码
Hello      world.This is    c language.

输出样例 1

复制代码
Hello world.This is c language.

参考代码

cs 复制代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int k;
	string a,s="";
	getline(cin,a);
	k=a.size();
	for(int i=0;i<k;i++){
		if(a[i]==' '&&a[i-1]!=' '){
			s+=a[i];
		}
		if(a[i]!=' ')
			s+=a[i];
	}
	cout<<s<<endl;
			
	return 0;
}

##字符串的包含问题

描述

现在有2个字符串a,b,请你判断它们之间的包含关系。

若能在b串中发现a串,则称:a in b。

若二者相等,则输出same。

若无包含关系,则输出no。

例如: app和apple

则app in apple

输入

输入2行:

每行1个字符串,最多1000个字符,不含空格。

输出

输出1行:

字符串a和b的关系。

输入样例 1

复制代码
app
apple 

输出样例 1

复制代码
app in apple

输入样例 2

复制代码
ppap
apple 

输出样例 2

复制代码
no

参考代码

cs 复制代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int k,m;
	string a,s;
	getline(cin,a);
	getline(cin,s);
	k=a.find(s,0);
	m=s.find(a,0);
	if(k!=-1&&m!=-1){
		cout<<"same";
	}
	else if(k!=-1){
		cout<<s<<" in "<<a;
	}
	else if(m!=-1){
		cout<<a<<" in "<<s;
	}
	else{
		cout<<"no";
	}		
	return 0;
}

##计算面积(area)

描述

小开是某小学的学生。在数学课上,小开的数学老师孟老师教会了大家梯形面积的计算公式:梯形面积=(上底+下底)*高/2。孟老师布置了多个关于梯形面积的计算题,作为当天的家庭作业。小开在完成了题目以后,决定编写一个程序计算梯形面积,检验自己计算的结果。给定梯形的上底a、下底b、高h的值(单位:厘米),请计算输出梯形的面积s(面积:平方厘米)。

输入

一行,三个正整数a,b,h

输出

一行,一个正整数s

输入样例 1

复制代码
3 6 5

输出样例 1

复制代码
22

提示

样例说明:

面积为(3+6)*5/2=22,结果取商的整数部分,没有小数。

【数据规模与约定】

对于50%的数据,1<=a,b,h<=50000。

对于100%的数据,1<=a,b,h<=1000000000。

结果取商的整数部分,没有小数。

参考代码

cs 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	long long a,b,h,s;
	cin>>a>>b>>h;
	s=(a+b)*h/2;
	cout<<s;
	return 0;
}

##括号匹配

描述

假设表达式中允许包含圆括号和方括号两种括号,其嵌套的顺序随意,如([]())或[([][])]等为正确的匹配,[(])或([]()或(()))均为错误的匹配。

本题的任务是检验一个给定表达式中的括号是否正确匹配。

输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出"OK",不匹配就输出"Wrong"。

输入

一行字符,只含有圆括号和方括号,括号个数小于 255。

输出

匹配就输出一行文本"OK",不匹配就输出一行文本"Wrong"。

输入样例 1

复制代码
[(])

输出样例 1

复制代码
Wrong 
cs 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	stack<char> s;
	string a;
	cin>>a;
	int i,j;
	for(i=0; i<a.size(); i++) {
		if(a[i]=='('||a[i]=='[') {
			s.push(a[i]);
		}
		if(a[i]==')') {
			if(s.empty()) {
				cout<<"Wrong"<<endl;
				return 0;
			}
			if(s.top()=='(') {
				s.pop();
			}
		}
		if(a[i]==']') {
			if(s.empty()) {
				cout<<"Wrong"<<endl;
				return 0;
			}
			if(s.top()=='[') {
				s.pop();
			}
		}
	}
	if(s.empty()) {
		cout<<"OK"<<endl;
	} else {
		cout<<"Wrong"<<endl;
	}

//fclose(stdin);
//fclose(stdout);
return 0;
}

##汉诺塔

描述

有三根相邻的柱子,标号为a,b,c,a柱子上从下到上按金字塔状叠放着n(n <= 15)个不同大小的圆盘,你可以借助b柱子,把所有盘子一个一个移动到柱子c上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请你输出移动的步骤。

输入

输入1行:

第1行:1个整数n, 1<= n <= 15。

输出

输出1行:

第1行:若干行,表示移动的步骤,格式参考样例

输入样例 1

复制代码
1

输出样例 1

复制代码
1:a->c

输入样例 2

复制代码
3

输出样例 2

复制代码
1:a->c
2:a->b
1:c->b
3:a->c
1:b->a
2:b->c
1:a->c
cs 复制代码
#include<bits/stdc++.h>
using namespace std;
void hnt(int n,char a,char b,char c){
	if(n==0){
		return ;
	}
	hnt(n-1,a,c,b);//n-1 个盘子,从a移动到b 
	cout<<n<<":"<<a<<"->"<<c<<endl;//第n个盘子,从a移动到c 
	hnt(n-1,b,a,c);//n-1 个盘子,从b移动到c 
} 
int main(){
	int n;
	
	cin>>n;
	hnt(n,'a','b','c');//n个盘子从a移动到c 





	return 0;
}
相关推荐
雨中rain29 分钟前
贪心算法(1)
算法·贪心算法
不爱学习的YY酱35 分钟前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
平头哥在等你1 小时前
求一个3*3矩阵对角线元素之和
c语言·算法·矩阵
飞滕人生TYF1 小时前
动态规划 详解
算法·动态规划
_OLi_1 小时前
力扣 LeetCode 106. 从中序与后序遍历序列构造二叉树(Day9:二叉树)
数据结构·算法·leetcode
尹蓝锐1 小时前
C语言-11-18笔记
c语言
ahadee1 小时前
蓝桥杯每日真题 - 第18天
c语言·vscode·算法·蓝桥杯
就爱六点起1 小时前
C/C++ 中的类型转换方式
c语言·开发语言·c++
猫猫的小茶馆1 小时前
【C语言】指针常量和常量指针
linux·c语言·开发语言·嵌入式软件
地平线开发者2 小时前
CPU& 内存加压工具 stress-ng 介绍
算法·自动驾驶