day18 algo 114、115、124、140、143、158、160、157

ALGO-114. ⿊黑⽩白⽆无常!!!

问题描述
某寝室的同学们在学术完之后准备玩⼀一个游戏:游戏是这样的,每个⼈人头上都被贴了了⼀一张⽩白⾊色或者⿊黑
⾊色的纸,现在每个⼈人都会说⼀一句句话“我看到x张⽩白⾊色纸条和y张⿊黑⾊色的纸条”,⼜又已知每个头上贴着⽩白⾊色
纸的⼈人说的是真话、每个头上贴着⿊黑⾊色纸的⼈人说的是谎话,现在要求你判断哪些⼈人头上贴着的是⽩白⾊色
的纸条,如果⽆无解输出“NoSolution.”;如果有多组解,则把每个答案中贴⽩白条的⼈人的编号按照⼤大⼩小排
列列后组成⼀一个数(⽐比如第⼀一个⼈人和第三个⼈人头上贴着的是⽩白纸条,那么这个数就是13;如果第6、7、
8个⼈人都贴的是⽩白纸条,那么这个数就是678)输出最⼩小的那个数(如果全部都是⿊黑纸条也满⾜足情况的
话,那么输出0)
输⼊入格式
第⼀一⾏行行为⼀一个整数n,接下来n⾏行行中的第i⾏行行有两个整数x和y,分别表示第i个⼈人说“我看到x张⽩白⾊色纸条
和y张⿊黑⾊色的纸条”。
输出格式
⼀一⾏行行。如果⽆无解输出“NoSolution.”。否则输出答案中数值(具体⻅见问题描述)最⼩小的那个,如果全部
都是⿊黑纸条也满⾜足情况的话,那么输出0
样例例输⼊入
2
1 0
1 0
样例例输出
0
样例例输⼊入
5
3 1
0 4
1 3
4 0
1 3
样例例输出
35
数据规模和约定
n<=8
分析:1.枚举所有⼈人的⿊黑⽩白字条情况,判断当前情况是否可能存在,把所有可能情况收集起来输出最
⼩小的
2.注意每⼈人看不不到⾃自⼰己头上的字条哦~

ALGO-115. 和为T!!!

问题描述
从⼀一个⼤大⼩小为n的整数集中选取⼀一些元素,使得它们的和等于给定的值T。每个元素限选⼀一次,不不能⼀一
个都不不选。
输⼊入格式
第⼀一⾏行行⼀一个正整数n,表示整数集内元素的个数。
第⼆二⾏行行n个整数,⽤用空格隔开。
第三⾏行行⼀一个整数T,表示要达到的和。
输出格式
输出有若⼲干⾏行行,每⾏行行输出⼀一组解,即所选取的数字,按照输⼊入中的顺序排列列。
若有多组解,优先输出不不包含第n个整数的;若都包含或都不不包含,优先输出不不包含第n-1个整数的,
依次类推。
最后⼀一⾏行行输出总⽅方案数。
样例例输⼊入
5
-7 -3 -2 5 9
0
样例例输出
-3 -2 5
-7 -2 9
2
数据规模和约定
1<=n<=22
T<=maxlongint
集合中任意元素的和都不不超过long的范围

ALGO-124. 数字三⻆角形!!

问题描述
  (图3.1-1)示出了了⼀一个数字三⻆角形。 请编⼀一个程序计算从顶⾄至底的某处的⼀一条路路
  径,使该路路径所经过的数字的总和最⼤大。
  ●每⼀一步可沿左斜线向下或右斜线向下⾛走;
  ●1<三⻆角形⾏行行数≤100;
  ●三⻆角形中的数字为整数0,1,…99;
  (图3.1-1)
输⼊入格式
  ⽂文件中⾸首先读到的是三⻆角形的⾏行行数。
  接下来描述整个三⻆角形
输出格式
  最⼤大总和(整数)
样例例输⼊入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

思考:
在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
int s[101][101];
int dp[101][101];
int n;
int f(int i,int j){
	if(dp[i][j]>=0)
		return dp[i][j];
	if(i==n)
		return s[i][j];
	else 
		return dp[i][j]=s[i][j]+max(f(i+1,j),f(i+1,j+1));
}
int main(){
	int sum=0;
	memset(dp,-1,sizeof(dp));
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){
			cin>>s[i][j];
		}
	}
	cout<<f(1,1);
	return 0;
}

ALGO-140. P1101

有⼀一份提货单,其数据项⽬目有:商品名(MC)、单价(DJ)、数量量(SL)。定义⼀一个结构体prut,
其成员是上⾯面的三项数据。在主函数中定义⼀一个prut类型的结构体数组,输⼊入每个元素的值,计算并
输出提货单的总⾦金金额。
  输⼊入格式:第⼀一⾏行行是数据项个数N(N<100),接下来每⼀一⾏行行是⼀一个数据项。商品名是⻓长度不不超过
100的字符串串,单价为double类型,数量量为整型。
  输出格式:double类型的总⾦金金额。
输⼊入:
  4
  book 12.5 3
  pen 2.5 10
  computer 3200 1
  flower 47 5
输出:
  3497.500000

思考:
见识一下,知道结构体怎么列

#include<iostream>
#include<vector>
using namespace std;
struct prut{
	string mc;
	double dj;
	int sl;
};
int main(){
	int n;
	cin>>n;
	double sum=0.0;
	vector<prut> a(n);
	for(int i=0;i<n;i++){
		cin>>a[i].mc>>a[i].dj>>a[i].sl;
		sum+=a[i].dj*a[i].sl;
	}
	cout<<sum;
	return 0;
}

ALGO-143. 字符串串变换

问题描述
  相信经过这个学期的编程训练,⼤大家对于字符串串的操作已经掌握的相当熟练了了。今天,徐⽼老老师想
测试⼀一下⼤大家对于字符串串操作的掌握情况。徐⽼老老师⾃自⼰己定义了了1,2,3,4,5这5个参数分别指代不不同的5种
字符串串操作,你需要根据传⼊入的参数,按照徐⽼老老师的规定,对输⼊入字符串串进⾏行行格式转化。
  徐⽼老老师指定的操作如下:
  1 表示全部转化为⼤大写字⺟母输出,如abC 变成 ABC
  2 表示全部转换为⼩小写字⺟母输出,如abC变成abc
  3 表示将字符串串整个逆序输出,如 abc 变成 cba
  4 表示将字符串串中对应的⼤大写字⺟母转换为⼩小写字⺟母,⽽而将其中的⼩小写字⺟母转化为⼤大写字⺟母输出,
如 abC变成ABc
  5 表示将全部转换为⼩小写字⺟母,并将其中所有的连续⼦子串串转换为对应的缩写形式输出,⽐比如abcD
转换为a-d,其次,-⾄至少代表1个字⺟母,既如果是ab,则不不需要转换为缩写形式。
输⼊入格式
  ⼀一共⼀一⾏行行,分别是指代对应操作的数字和字符串串,两者以空格分隔,字符串串全部由英⽂文字⺟母组成
输出格式
输出根据上述规则转换后对应的字符串串
样例例输⼊入
5 ABcdEE
样例例输出
a-ee
数据规模和约定
  输⼊入字符串串⻓长度最⻓长为200。

思考:
关注一下n=5的情况即可

#include<iostream>
#include<cstring>
#include<cstdio>
#include<ctype.h>
using namespace std;
int main(){
	int n;
	string s,t;
	cin>>n>>s;
	if(n==1){
		for(int i=0;i<s.length();i++)
			putchar(toupper(s[i]));
	}
	if(n==2){
		for(int i=0;i<s.length();i++)
			putchar(tolower(s[i]));
	}
	if(n==3){
		for(int i=s.length()-1;i>=0;i--)
			cout<<s[i];
	}
	if(n==4){
		for(int i=0;i<s.length();i++){
			if(s[i]>='A'&&s[i]<='Z')
				putchar(tolower(s[i]));
			else{
				putchar(toupper(s[i]));
			}
		}
	}
	if(n==5){
		for(int i=0;i<s.length();i++)
			s[i]=tolower(s[i]);
		for(int i=0;i<s.length();i++){
			if(i==0)
			 t+=s[0];
			else if(i!=s.length()-1){
				if(s[i]!=s[i-1]+1||s[i+1]!=s[i]+1)
					t+=s[i];
				else if(t[t.length()-1]!='-')
					t+='-';
			}else t+=s[i];
		}
		cout<<t;
	}
	return 0;
}

ALGO-158. sign函数

问题描述
给定实数x,输出sign(x)的值。
sign(x)是符号函数,如果x>0,则返回1;如果x=0,则返回0;如果x<0,则返回-1。
输⼊入格式
⼀一⾏行行⼀一个实数x。
输出格式
⼀一⾏行行⼀一个整数表示答案。
样例例输⼊入
-0.0001
样例例输出
-1
数据规模和约定
|x|<=10000,输⼊入数据精度最多达到4位⼩小数。

提示
判断实数x是否等于零时,由于计算机实数运算误差,应当引⼊入极⼩小量量eps,核⼼心代码如下:
其中fabs为cmath中的绝对值函数。
const double eps=1e-6;
if (fabs(x) <= eps) {
//x是零
}

#include<iostream>
#include<cmath>
#define eps 1e-6
using namespace std;
int sign(double x){
	if(x>0) return 1;
	else if((x==0)||fabs(x)<=eps) return 0;
	else return -1;
}
int main(){
	
	double x;
	cin>>x;
	cout<<sign(x);
	return 0;
}

ALGO-160. P0104

求⽅方程ax2+bx+c=0的实数根。a, b, c由键盘输⼊入, a!=0。若只有⼀一个实数根(b2-4ac=0)则只输出
x1,若⽆无实数根(b2-4ac<0)则输出Error。
输⼊入
2.5 7.5 1.0
输出
(注意等号前⾯面后⾯面都有⼀一个空格)
x1 = -0.139853
x2 = -2.860147

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
double a,b,c;


int main(){
	cin>>a>>b>>c;
	if(pow(b,2)-4*a*c>0){
		printf("x1 = %6f\n",(-1 * b + sqrt(pow(b,2)-4*a*c)) / (2 * a));
		printf("x2 = %6f\n",(-1 * b - sqrt(pow(b,2)-4*a*c)) / (2 * a));
	}else if(pow(b,2)-4*a*c>0==0){
		printf("x1 = %6f\n",-1 * b / (2 * a));
	}else{
		cout<<"Error"; 
	} 
	return 0;
}

ALGO-157. 阶乘末尾!

问题描述
给定n和len,输出n!末尾len位
输⼊入格式
⼀一⾏行行两个正整数n和len。
输出格式
⼀一⾏行行⼀一个字符串串,表示答案。⻓长度不不⾜足⽤用前置零补全。
样例例输⼊入
6 5
样例例输出
00720
数据规模和约定
n<=30, len<=10。
分析:1.每次只要取后len位的数字就够了了,输出的时候位数不不够要补0
2.判断数字位数的时候可以取以10为底的对数(蓝桥杯不不⽀支持c++ 11中的to_string()⽅方法哦~)
注意:
s.c_str()是将string类型转换成char类型

#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, len, cnt = 0;
cin >> n >> len;
long long res, ans = 1, m = pow(10, len);
for (int i = 1; i <= n; i++)
ans = (ans * i) % m;
if (ans == 0) cnt = 1;
else cnt = log10(ans) + 1;
string s(len - cnt, '0');
printf("%s%d", s.c_str(), ans);
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值