【无标题】

文章包含多个数学和计算机科学相关的题目,如利用排序和组合判断能否用6根棍子组成两个三角形,计算化学式的相对分子质量和最小费用规划,以及求解整数减少至零的最少步骤。这些问题展示了算法在解决实际问题时的重要性。
摘要由CSDN通过智能技术生成

拼三角

给出6根棍子,能否在选出3根拼成一个三角形的同时剩下的3根也能组成一个三角形?

输入描述:

 

首先在一行中给出一个 t,1≤t≤103t,1 \le t \le 10^3t,1≤t≤103,代表测试数据的组数

接下来t行,每行给出6个数字代表棍子长度,棍子长度为正且小于10910^9109

输出描述:

在一行中输出 “Yes” or “No”

两边之和大于第三边,轮流排序比较判断

#include<bits/stdc++.h>
using namespace std;

int a[11],t,k;

int main()
{
	cin>>t;
	while(t--)
	{
		k=0;
		for(int i=1;i<=6;i++)
		{
			cin>>a[i];
		}
		sort(a+1,a+7);
		do
		{
			if(a[1]+a[2]>a[3]&&a[1]+a[3]>a[2]&&a[2]+a[3]>a[1]&&a[4]+a[5]>a[6]&&a[4]+a[6]>a[5]&&a[5]+a[6]>a[4])
			{
				cout<<"Yes"<<endl;
				k=1;
				break;
	 		}
		}while(next_permutation(a+1,a+7));
		if(!k)
			cout<<"No"<<endl;
	}
	return 0;
}

相对分子质量

题目描述

给出单个原子的相对原子质量,计算化学式的相对分子质量。

输入描述:

 

第一行中给出两个正整数M,N,1≤M≤100,1≤N≤20M,N,1 \le M \le 100,1 \le N \le 20M,N,1≤M≤100,1≤N≤20

接下来M行每行给出一个以大写字母开头的字符串S和一个正整数X,S为元素名称,X为相对原子质量,1≤X≤5001 \le X \le 5001≤X≤500

最后N行每行给出一个化学式,保证化学式长度不超过50个字符

元素可能是一个大写字母,也可能是一个大写字母跟着一个小写字母,保证给出的M种化学元素互不相同

化学式包含括号以及括号嵌套,例如:Ba((OH)2(CO3)2)3

注:保证化学式使用给出的元素符号,但不保证该物质真实存在

E春游

题目描述

 盼望着,盼望着,东风来了,春天脚步近了。

值此大好春光,老师组织了同学们出去划船,划船项目收费如下:

双人船最多坐两人,也可以坐一人,收费a{a}a元

三人船最多坐三人,也可以坐两人或者一人,收费b{b}b元

本次出游加上带队老师共n{n}n人,如何安排能使得花费最小呢?

输入描述:

 

第一行给出一个正整数 T(1≤T≤1000)T(1 \le T \le 1000)T(1≤T≤1000),代表测试数据的组数。

接下来 T{T}T 行每行给出三个正整数n,a,b,1≤n,a,b≤109n, a, b,1 \le n,a,b \le 10^9n,a,b,1≤n,a,b≤109,含义如题。

输出描述:

 

每组输入输出一行,代表最小的花费

#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll t,n,a,b,q,w;

int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>a>>b;
		q=min((n+1)/2*a,(n-2)/2*a+b);
    	w=min((n+2)/3*b,min((n-2)/3*b+2*a,n/3*b+a));
		cout<<min(q,w)<<endl;
	}
	return 0;
}

C消减整数

题目描述

给出一个正整数H,从1开始减,第一次必须减1,每次减的数字都必须和上一次相同或者是上一次的两倍,请问最少需要几次能把H恰好减到0。

输入描述:

 

第一行给出一个正整数T{T}T,1≤T≤1041 \le T \le 10^41≤T≤104

接下来T行每行一个H,1≤H≤109H,1 \le H \le 10^9H,1≤H≤109

输出描述:

每行一个正整数代表最少的次数

#include<bits/stdc++.h>
using namespace std;

int t,h,num,k;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>h;
		num=0;
		k=1;
		if(h%2==0)
		{
			h-=2;
			num+=2;
		}
		else
		{
			h-=1;
			num++;
		}
		while(h)
		{
			if(h%(k*2)==0)
			{
				num++;
				k*=2;
				h-=k;
			}
			else
			{
				h-=k;
				num++;
			}
		}
		cout<<num<<endl;
	} 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值