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;
}
相关推荐
向阳@向远方1 小时前
第二章 简单程序设计
开发语言·c++·算法
JeffersonZU1 小时前
Linux/Unix进程概念及基本操作(PID、内存布局、虚拟内存、环境变量、fork、exit、wait、exec、system)
linux·c语言·unix·gnu
Mr_Xuhhh1 小时前
信号与槽的总结
java·开发语言·数据库·c++·qt·系统架构
github_czy2 小时前
RRF (Reciprocal Rank Fusion) 排序算法详解
算法·排序算法
liulilittle2 小时前
VGW 虚拟网关用户手册 (PPP PRIVATE NETWORK 基础设施)
开发语言·网络·c++·网关·智能路由器·路由器·通信
许愿与你永世安宁2 小时前
力扣343 整数拆分
数据结构·算法·leetcode
爱coding的橙子2 小时前
每日算法刷题Day42 7.5:leetcode前缀和3道题,用时2h
算法·leetcode·职场和发展
ruanjiananquan992 小时前
c,c++语言的栈内存、堆内存及任意读写内存
java·c语言·c++
满分观察网友z3 小时前
从一次手滑,我洞悉了用户输入的所有可能性(3330. 找到初始输入字符串 I)
算法
持梦远方3 小时前
C 语言基础入门:基本数据类型与运算符详解
c语言·开发语言·c++