当前位置: 首页 > article >正文

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

## 过滤多余的空格

描述

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

输入

输入1行:

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

输出

输出1行:

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

输入样例 1 

Hello      world.This is    c language.

输出样例 1

Hello world.This is c language.

参考代码

#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

参考代码

#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。

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

参考代码

#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 
#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
#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;
}


http://www.kler.cn/a/401852.html

相关文章:

  • Apache和HTTPS证书的生成与安装
  • ASP.NET MVC宠物商城系统
  • 第23次CCF计算机软件能力认证
  • urdf笔记
  • UE5 材质里面画圆锯齿严重的问题
  • 【学习笔记】大模型调优(llms_tuning)
  • Dubbo自定义扩展注册中心
  • Jav项目实战II基于微信小程序的助农扶贫的设计与实现(开发文档+数据库+源码)
  • 数据结构(二)线性表
  • 助力模型训练,深度学习的经典数据集介绍
  • Matplotlib | 理解直方图中bins表示的数据含义
  • WPF 中 MultiConverter ——XAML中复杂传参方式
  • 推荐一款UI/UX原型设计工具:Icons8 Lunacy
  • 【Rust 学习笔记】Rust 安装与 “Hello World” 程序介绍
  • qt中ctrl+鼠标左键无法进入
  • MFC图形函数学习09——画多边形函数
  • 【小程序】dialog组件
  • PHP批量操作加锁
  • CSP/信奥赛C++语法基础刷题训练(16):洛谷P5731:蛇形方阵
  • C++11——异常
  • 网络安全检测技术
  • python用哈希删除文件夹中重复的图片
  • linux配置动态ip
  • 网络--网络层协议--IP
  • ARM CCA机密计算安全模型之生态
  • hhdb数据库介绍(9-24)