#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
#include <bits/stdc++.h>
using namespace std;
int main()
{int n,k;cin>>n>>k;int a[1010];for(int i = 0;i<n;i++){cin>>a[i];}for(int i = 0;i<n-1;i++){for(int j = i+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
#include <bits/stdc++.h>
using namespace std;
int main()
{int n;int cnt = 1;cin>>n;for(int i = 0;i<=n/5;i++){for(int j = 0;j<=(n-i*5)/2;j++){for(int k = 0;k<=(n-i*5-j*2)/1;k++){if(i*5+j*2+k*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)<<k;cout<<setw(12)<<j;cout<<setw(12)<<i;cout<<endl;cnt++;}}}}return 0;
}
#6171. 分解因数
题目描述
给出一个正整数 a,要求分解成若干个正整数的乘积,即 a=a1×a2×a3×...×an,并且 1<a1≤a2≤a3≤...≤an, 问这样的分解的种数有多少。
注意到a=a也是一种分解。
输入格式
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1<a<32768)。
输出格式
行,每行输出对应一个输入。输出应是一个正整数,指明满足要求的分解的种数。
样例
样例输入
复制2
2
20
样例输出
复制1
4
#include <bits/stdc++.h>
using namespace std;
int aaa(int,int,int);
int main()
{int n;cin>>n;int a[200];for(int i = 0;i<n;i++){cin>>a[i];}for(int i = 0;i<n;i++){cout<<aaa(a[i],2,0)<<endl;}return 0;
}
int aaa(int n,int k,int cnt)
{if(n==1){cnt++;return cnt;}for(int i = k;i<=n;i++){if(n%i==0){cnt = cnt+aaa(n/i,i,0);}}return cnt;
}
#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
#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;
}
#1145. 和数
题目描述
给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列 , 这个问题的答案就是 , 因为 。
输入格式
共两行,第一行是数列中数的个数 n ( 1<=n<=100 ),第二行是由 n 个不大于 10000 的正整数组成的数列,相邻两个整数之间用单个空格隔开。
输出格式
一个整数,即数列中等于其他两个数之和的数的个数。
样例
样例输入
复制4
1 2 3 4
样例输出
复制2
#include <bits/stdc++.h>
using namespace std;
int b[1000000];
int lb = 0;
int main()
{int n;cin>>n;int a[110];int cnt = 0;for(int i = 0;i<n;i++){cin>>a[i];}for(int i = 0;i<n;i++){for(int j = i;j<n;j++){for(int k = 0;k<n;k++){if(a[i]+a[j]==a[k]&&i!=j&&j!=k&&i!=k){bool f = true;for(int l = 0;l<lb;l++){if(b[l]==a[k]){f = false;break;}}if(f==true){cnt++;b[lb] = a[k];lb++;}}}}}cout<<cnt;return 0;
}
#203. 质数的和与积
题目描述
两个质数的和是 S,它们的积最大是多少?
输入格式
一个不大于10000000的正整数S,为两个质数的和。
输出格式
一个整数,为两个质数的最大乘积。数据保证有解。
样例
样例输入
复制50
样例输出
复制589
数据范围与提示
对于 50% 数据:0<S≤100000
对于 100% 的数据:0<S≤10000000
#include <bits/stdc++.h>
using namespace std;
bool zhishu(int);
int main()
{long long int ma = -99999;long long int s;cin>>s;for(long long int i = 2;i*2<s+1;i++){if(zhishu(i)==true&&zhishu(s-i)==true){ma = max(ma,i*(s-i));}}cout<<ma;return 0;
}
bool zhishu(int n)
{if(n==1) return false;if(n==2) return true;for(int i = 2;i<n;i++){if(n%i==0) return false;}return true;
}
#4176. 爬楼
题目描述
已知楼梯的数量,可以每次走2级或者3级,求不同的走法数。
例如:楼梯一共有7级,一共3种方法:2 2 3或者 2 3 2 或者 3 2 2。
输入格式
输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 50。 最后一行为0,表示测试结束。
输出格式
不同的走法数,每一行输入对应一行输出
样例
样例输入
复制5
7
0
样例输出
复制2
3
#include <bits/stdc++.h>
using namespace std;
int main()
{int n = 0;int a[100];while(true){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;
}