c++三级

#4346. 「2024.06三级」三足鼎立

题目描述

当三个国家中的任何两国实力之和都大于第三国的时候,这三个国家互相结盟就呈"三足鼎立"之势,这种状态是最稳定的。

现已知本国的实力值,又给出 n 个其他国家的实力值。我们需要从这 n 个国家中找 2 个结盟,以成三足鼎立。有多少种选择呢?

输入格式

输入首先在第一行给出 2 个正整数 n(2 ≤ n ≤

)和 P( ),分别为其他国家的个数、以及本国的实力值。随后一行给出 n 个正整数,表示n 个其他国家的实力值。每个数值不超过

,数字间以空格分隔。

输出格式

在一行中输出本国结盟选择的个数。

样例

样例输入

复制代码
7 30
42 16 2 51 92 27 35

样例输出

复制代码
9

样例解释

能联合的另外 2 个国家的 9 种选择分别为: {16, 27}, {16, 35}, {16, 42}, {27, 35}, {27, 42}, {27, 51}, {35, 42}, {35, 51}, {42, 51}。

cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int n,p;
    cin>>n>>p;
    int a[110000];
    for(int i = 0;i<n;i++)
    {
        cin>>a[i];
    }
    int sum = 0;
    for(int i = 0;i<n-1;i++)
    {
        for(int j = i+1;j<n;j++)
        {
            if(a[i]+a[j]>p && a[i]+p>a[j] && a[j]+p>a[i])
            {
                sum++;
            }
        }        
    }
    cout<<sum;
    return 0;
}

#208. 我家的门牌号

题目描述

我家住在一条短胡同里,这条胡同的门牌号从1开始顺序编号。

若所有的门牌号之和减去我家门牌号的两倍,恰好等于n,求我家的门牌号及总共有多少家。

数据保证有唯一解。

输入格式

一个正整数n。n < 100000。

输出格式

一行,包含两个正整数,分别是我家的门牌号及总共有多少家,中间用单个空格隔开。

样例

样例输入

复制代码
100

样例输出

复制代码
10 15
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int i = 1;
	while(1)
	{
		int sum = 0;
		for(int j = 1;j<=i;j++)
		{
			sum = sum + j;
		}
		for(int j = 1;j<=i;j++)
		{
			if(sum-j*2 == n)
			{
				cout<<j<<" "<<i<<endl;
				return 0;
			}
		}
		i++;
	}
	return 0;
}

#3890. 最接近的分数

题目描述

分母不超过 N 且 小于 A/B 的最大最简分数是多少?

输入格式

三个正整数N,A,B,相邻两个数之间用单个空格隔开。1 <= A < B < N <= 1000。

输出格式

两个正整数,分别是所求分数的分子和分母,中间用单个空格隔开。

样例

样例输入

复制代码
100 7 13

样例输出

复制代码
50 93
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
double m;
double max_value = -1;
int max_fm = -1;
int max_fz = -1;
bool ifzuijian(int a,int b);
int main()
{
	int n,a,b;
	cin>>n>>a>>b;
	m = 1.0*a/b;
	for(int fm = 1;fm<=n;fm++)
	{
		for(int fz = 1;fz<fm;fz++)
		{
			double v = 1.0*fz/fm;
			if(ifzuijian(fz,fm)==true && v<m)
			{
				if(v>max_value)
				{
					max_value = v;
					max_fz = fz;
					max_fm = fm;
				}
			}
		}
	}
	cout<<max_fz<<" "<<max_fm<<endl;
	
	return 0;
}
bool ifzuijian(int a,int b)
{
	for(int i = 2;i<=min(a,b);i++)
	{
		if(a%i==0 && b%i==0) return false;
	}
	return true;
}

#6197. 菲波那契数列(2)

题目描述

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。

给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。

输入格式

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1≤a≤1000000)。

输出格式

n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数对1000取模得到的结果。

样例

样例输入

复制代码
4
5
2
19
1

样例输出

复制代码
5
1
181
1
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int a[1000000];
int main()
{
	a[1] = 1;
	a[2] = 1;
	for(int i = 3;i<=1000000;i++)
	{
		a[i] = (a[i-1] + a[i-2])%1000;
	}
	int n;
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		int b;
		cin>>b;
		cout<<a[b]<<endl;
	}
	return 0;
}

#4193. 因子问题

题目描述

任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。

输入格式

包括两个整数N、M。N不超过1,000,000。

输出格式

输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出-1

样例

样例输入

复制代码
35 10

样例输出

复制代码
5
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n,m;
	cin>>n>>m;
	for(int a = 2;a<m;a++)
	{
		if(n%(m-a)==0 && n%a==0)
		{
			cout<<a;
			return 0;
		}
	}
	cout<<-1;
	return 0;
}

#5063. Minecraft

题目描述

Minecraft 是一个几乎无所不能的沙盒游戏,玩家可以利用游戏内的各种资源进行创造,搭建自己的世界。

在 Minecraft 中,基本的建筑元素是边长为 1 个单位的立方体,Tony 想用 N 个这种小立方体搭建一个长方体,并用他珍藏已久的贴纸对其进行装饰。

如果一张贴纸可以贴满小立方体的一个面。那么,他需要用掉多少张贴纸呢?

输入格式

一个整数 N,表示小明所拥有的小立方体的个数。N 不会超过 1000。

输出格式

一个整数,即小明最少用掉的贴纸有多少张。

样例

样例输入

复制代码
9

样例输出

复制代码
30
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int v;
	cin>>v;
	int mi = 9999999;
	for(int a = 1;a<=v;a++)
	{
		for(int b = 1;b<=v/a;b++)
		{
			int h = v/a/b;
			if(v == a*b*h)
			{
				int s = (a*b+a*h+b*h)*2;
				mi = min(mi,s);
			}
		}
	}
	cout<<mi;
	return 0;
}

#5062. 找和为K的两个元素

题目描述

在一个长度为n(n<1000)的整数序列中,判断是否存在某两个元素之和为k。

输入格式

第一行输入整数序列的长度n和k,n和k以空格间隔。

第二行输入整数序列中的n个整数,整数以空格间隔。

输出格式

如果存在某两个元素的和为k,则输出"yes",否则输出"no"。

样例

样例输入

复制代码
9 10
1 2 3 4 5 6 7 8 9

样例输出

复制代码
yes
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int a[1010];
	int n,k;
	cin>>n>>k;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i = 0;i<n;i++)
	{
		for(int j = 1;j<n;j++)
		{
			if(a[i]+a[j] == k)
			{
				cout<<"yes";
				return 0;
			}
		}
	}
	cout<<"no";
	return 0;
}

#4298. 「2023.05 三级」硬币面值组合

题目描述

使用1角、2角、5角硬币组成 n 角钱。

设1角、2角、5角的硬币各用了a、b、c个,列出所有可能的a, b, c组合。

输出顺序为:先按c的值从小到大,若c相同则按b的值从小到大。

输入格式

一个整数n(1 <= n <= 100),代表需要组成的钱的角数。

输出格式

输出有若干行,每行的形式为: i a b c 第1列i代表当前行数(行数从001开始,固定3个字符宽度,宽度不足3的用0填充),后面3列a, b, c分别代表1角、2角、5角硬币的个数(每个数字固定12个字符宽度,宽度不足的在左边填充空格)。

样例

样例输入

复制代码
10

样例输出

复制代码
001          10           0           0
002           8           1           0
003           6           2           0
004           4           3           0
005           2           4           0
006           0           5           0
007           5           0           1
008           3           1           1
009           1           2           1
010           0           0           2
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int cnt = 1;
	for(int i = 0;i<=n/5;i++)
	{
		for(int j = 0;j<=(n-i*5)/2;j++)
		{
			int a = n-i*5 - j*2;
			if(i*5+j*2+a*1==n)
			{
				if(cnt/10==0) cout<<"00"<<cnt;
				else if(cnt/100==0) cout<<"0"<<cnt;
				else if(cnt/1000==0) cout<<cnt;
				cout<<setw(12)<<a;
				cout<<setw(12)<<j;
				cout<<setw(12)<<i;
				cout<<endl;
				cnt++;
			}
		}
	}
	return 0;
}

#4299. 「2023.05 三级」数列

题目描述

用以下方式构造数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。

给出一个正整数a,要求数列中第a个数对1000取模的结果是多少。

输入格式

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 1000000)。

输出格式

n行,每行输出对应一个输入。输出应是一个正整数,为数列中第a个数对1000取模得到的结果。

样例

样例输入

复制代码
4
5
2
19
1

样例输出

复制代码
5
1
181
1
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int b[1000010];
int main()
{
	int n;
	cin>>n;
	int a[1010];
	for(int i = 0;i<n;i++)
	{
		 cin>>a[i];
	}
	b[1] = 1;
	b[2] = 1;
	for(int i = 3;i<=1000000;i++)
	{
		b[i] = (b[i-1]+b[i-2])%1000;
	}
	cout<<endl;
	for(int i = 0;i<n;i++)
	{
		cout<<b[a[i]]<<endl;
	}
	
	return 0;
}

#203. 质数的和与积

题目描述

两个质数的和是 S,它们的积最大是多少?

输入格式

一个不大于10000000的正整数S,为两个质数的和。

输出格式

一个整数,为两个质数的最大乘积。数据保证有解。

样例

样例输入

复制代码
50

样例输出

复制代码
589
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
bool zhishu(long long);
int main()
{
	long long s;
	cin>>s;
	for(long long i = s/2;i<=s;i++)
	{
		long long a = i;
		long long b = s-i;
		if(zhishu(a)==true && zhishu(b)==true)
		{
			cout<<a*b<<endl;
			return 0;
		}
	}
	return 0;
}
bool zhishu(long long n)
{
	if(n==1||n==0) return 0;
	for(long long i = 2;i*i<=n;i++)
	{
		if(n%i==0) return 0;
	}
	return true;
} 

#4176. 「2023.03 三级」爬楼

题目描述

已知楼梯的数量,可以每次走2级或者3级,求不同的走法数。

例如:楼梯一共有7级,一共3种方法:2 2 3或者 2 3 2 或者 3 2 2。

输入格式

输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 50。 最后一行为0,表示测试结束。

输出格式

不同的走法数,每一行输入对应一行输出

样例

样例输入

复制代码
5
7
0

样例输出

复制代码
2
3
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n = 0;
	int a[100];
	while(1)
	{
		int t;
		cin>>t;
		if(t==0)
		{
			break;
		}
		a[n] = t;
		n++;
	}
	int b[51];
	b[1] = 0;
	b[2] = 1;
	b[3] = 1;
	for(int i = 4;i<=50;i++)
	{
		b[i] = b[i-2]+b[i-3];
	}
	cout<<endl;
	for(int i = 0;i<n;i++)
	{
		cout<<b[a[i]]<<endl;
	}
	return 0;
}

#204. 鸡兔同笼[2]

题目描述

一个笼子里面关了鸡和兔子(鸡有 2 只脚,兔子有 4 只脚,没有例外)。

已经知道了笼子里面脚的总数 a,问笼子里面至少有多少只动物,至多有多少只动物。

输入格式

一行,一个正整数 a 。

输出格式

一行,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开。

如果没有满足要求的答案,则输出两个 0,中间用一个空格分开。

样例
输入样例
复制代码
20
输出样例
复制代码
5 10
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n;
	cin>>n;
	if(n%2==1)
	{
		cout<<"0 0";
		return 0; 
	}
	if(n%4==0)
	{
		cout<<n/4<<" ";
	}
	else if(n%2==0)
	{
		int t = n-2;
		cout<<t/4+1<<" ";
	}
	cout<<n/2;
	return 0;
}

#4173. 课程冲突

题目描述

小 A 修了 n 门课程, 第 i 门课程是从第 ai 天一直上到第 bi 天。

定义两门课程的冲突程度为 : 有几天是这两门课程都要上的。

例如 a1=1,b1=3,a2=2,b2=4 时, 这两门课的冲突程度为 2。

现在你需要求的是这 n 门课中冲突程度最大的两门课的冲突程度。

输入格式

第一行一个正整数 n 表示课程数量。 接下来 n 行,每行两个正整数 ai,bi。 2 ≤ n≤ 1000, 1 ≤ ai ≤ bi ≤ 1000。

输出格式

输出一个整数表示最大的冲突程度。

样例

样例输入

复制代码
3
1 3
2 4
5 5

样例输出

复制代码
2
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
struct couers
{
	int sT;
	int eT;
};
couers a[1010];
int n;
int ma = -1;
int main()
{
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i].sT>>a[i].eT;
	}
	for(int i = 0;i<n-1;i++)
	{
		for(int j = 0;j<n-1-i;j++)
		{
			if(a[j].sT>a[j+1].sT)
			{
				swap(a[j],a[j+1]);
			}
		}
	}
	for(int i = 0;i<n;i++)
	{
		for(int j = i+1;j<n;j++)
		{
			if(a[i].eT>=a[j].sT)
			{
				int ct = min(a[i].eT,a[j].eT) - max(a[i].sT,a[j].sT) + 1;
				ma = max(ma,ct);
			}
		}
	}
	cout<<ma;
	return 0;
}

#4229. 「2022.06三级」迷信的病人

题目描述

医院为了方便对患者进行建档和管理,引入了9位整数ID号来标识每个病人。

最近医院入住了一个迷信的病人,他认为ID号的好坏直接决定了自己的命运。

他对ID号x有如下要求:

(1)x的前三位数构成的整数是素数

(2)x的后三位数构成的整数是平方数(所谓平方数,是指它是某一个正整数的平方,e.g. 1,4,9,16...)

(3)x中不包含"13"

为了避免不必要的医患矛盾,医院须尽量满足他的需求。

现给定正整数区间[m,n],请你判断存在几个满足病人需求的ID号。

输入格式

两个正整数m,n,以空格隔开。(999999999>=n>=m>=111111111)

输出格式

一个整数(满足要求的ID的个数)。

样例

样例输入

复制代码
157689476 157689687

样例输出

复制代码
5
cpp 复制代码
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int a[1005];
int n, m;
int sum = 0;

int main()
{
	
	cin>>m>>n;
	for(int i = 2;i * i <= 999;i++) 
	{
		if(a[i] == 1)
		{
			continue; 
		}
		for(int j = i * i; j <= 999; j += i)
		{
			a[i] = 1; 
		}
	}
	for(int i = m;i<=n;i++)
	{
		if (a[i / 1000000] == 1)
		{
			continue; 
		}
		int w = i % 1000;
		int g = sqrt(w);
		if (g * g != w)
		{
			continue; 
		}
		bool flag = 1;
		for(int j = 1;j<=10000000;j*=10) 
		{
			if(i / j % 100 == 13)
			{
				flag = 0;
				break;
			}
		}
		if(flag == 1) 
		{
			sum++;
		}
	}
	cout<<sum;
	return 0;
}

#4205. 「2022.06三级」制作蛋糕

题目描述

小A擅长制作香蕉蛋糕和巧克力蛋糕。制作一个香蕉蛋糕需要2个单位的香蕉,250个单位的面粉,75个单位的糖,100个单位的黄油。制作一个巧克力蛋糕需要75个单位的可可粉,200个单位的面粉,150个单位的糖,150个单位的黄油。一个香蕉蛋糕可以卖出400元,而一个巧克力蛋糕可以卖出450元。为了避免蛋糕变质,每种蛋糕至多只能制作100个。

现已知每种原料的数量,求小A至多可以卖出多少元的蛋糕。

输入格式

依次输入面粉、香蕉、糖、黄油、可可粉的数量,每种原料数量均为不超过100000的整数。

输出格式

输出一个整数,表示最多卖出的钱数。

样例

样例输入

复制代码
4000
6
2000
500
500

样例输出

复制代码
1700
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int mf,xj,t,hy,kkf;
	int sum = 0;
	cin>>mf>>xj>>t>>hy>>kkf;
	int ma = -99999;
	for(int i = 0;i<=min(min(mf/250,xj/2),min(t/75,hy/100));i++)
	{
		int mf1 = i*250;
		int xj1 = i*2;
		int t1 = i*75;
		int hy1 = i*100;
		for(int j = 0;j<=min(min((mf-mf1)/200,kkf/75),min((t-t1)/150,(hy-hy1)/150));j++)
		{
			int mf2 = j*200;
			int kkf2 = j*75;
			int t2 = j*150;
			int hy2 = j*150;
			if(mf2+mf1<=mf&&kkf2<=kkf&&xj1<=xj&&t1+t2<=t&&hy1+hy2<=hy)
			{
				ma = max(ma,i*400+j*450);
			}
		}
	}
	cout<<ma;
	return 0;
}

#4229. 「2022.06三级」迷信的病人

题目描述

医院为了方便对患者进行建档和管理,引入了9位整数ID号来标识每个病人。

最近医院入住了一个迷信的病人,他认为ID号的好坏直接决定了自己的命运。

他对ID号x有如下要求:

(1)x的前三位数构成的整数是素数

(2)x的后三位数构成的整数是平方数(所谓平方数,是指它是某一个正整数的平方,e.g. 1,4,9,16...)

(3)x中不包含"13"

为了避免不必要的医患矛盾,医院须尽量满足他的需求。

现给定正整数区间[m,n],请你判断存在几个满足病人需求的ID号。

输入格式

两个正整数m,n,以空格隔开。(999999999>=n>=m>=111111111)

输出格式

一个整数(满足要求的ID的个数)。

样例

样例输入

复制代码
157689476 157689687

样例输出

复制代码
5
cpp 复制代码
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int a[1005];
int n, m;
int sum = 0;

int main()
{
	
	cin>>m>>n;
	for(int i = 2;i * i <= 999;i++) 
	{
		if(a[i] == 1)
		{
			continue; 
		}
		for(int j = i * i; j <= 999; j += i)
		{
			a[i] = 1; 
		}
	}
	for(int i = m;i<=n;i++)
	{
		if (a[i / 1000000] == 1)
		{
			continue; 
		}
		int w = i % 1000;
		int g = sqrt(w);
		if (g * g != w)
		{
			continue; 
		}
		bool flag = 1;
		for(int j = 1;j<=10000000;j*=10) 
		{
			if(i / j % 100 == 13)
			{
				flag = 0;
				break;
			}
		}
		if(flag == 1) 
		{
			sum++;
		}
	}
	cout<<sum;
	return 0;
}

#6180. 求最大公约数问题

题目描述

给定两个正整数,求它们的最大公约数。

输入格式

输入一行,包含两个正整数(<1,000,000,000)。

输出格式

输出一个正整数,即这两个正整数的最大公约数。

样例

样例输入

复制代码
6 9

样例输出

复制代码
3
cpp 复制代码
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    int i = max(a,b);
    while(true)
    {
        if(a%i==0 && b%i==0)
        {
            cout<<i;
            break;
        }
        i--;
    }
    return 0;
}
相关推荐
2401_832131952 小时前
模板编译期机器学习
开发语言·c++·算法
2401_838472512 小时前
单元测试在C++项目中的实践
开发语言·c++·算法
naruto_lnq2 小时前
移动语义与完美转发详解
开发语言·c++·算法
赤水无泪3 小时前
04 C++语言---运算符和符号
开发语言·c++
从此不归路3 小时前
Qt5 进阶【10】应用架构与插件化设计实战:从「单体窗口」走向「可扩展框架」
开发语言·c++·qt·架构
瓦特what?3 小时前
C++编程防坑指南(小说版)
android·c++·kotlin
sjjhd6523 小时前
C++模拟器开发实践
开发语言·c++·算法
Queenie_Charlie3 小时前
素数(线性筛法)
c++·线性筛法·质数·简单数论
莹莹学编程—成长记3 小时前
TCP/IP五层模型+网络传输基本流程
网络·c++