洛谷打卡 Day2
题目描述
将 1,2,…,9共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C试求出所有满足条件的三个三位数,若无解,输出 No!!!。
输入格式
三个数,A,B,C。
输出格式
若干行,每行 333 个数字。按照每行第一个数字升序排列。
输入输出样例
输入
1 2 3
输出
192 384 576
219 438 657
273 546 819
327 654 981
说明/提示
保证 A<B<C。
题解
#include<iostream>
using namespace std;
int a[10], vis[10] = {0};
int x,y,z, f = 0;
void print()
{
cout<<a[1]*100+a[2]*10+a[3]<<" ";
cout<<a[4]*100+a[5]*10+a[6]<<" ";
cout<<a[7]*100+a[8]*10+a[9]<<endl;
f = 1;
}
void dfs(int n)
{
for(int i = 1; i <= 9; i++)
{
if(vis[i] == 0){ vis 用来判断是否重复
a[n] = i;
vis[i] = 1;
if(n == 9&&
(a[1]*100 + a[2]*10 + a[3])*y==
(a[4]*100 + a[5]*10 + a[6])*x&&
(a[4]*100 + a[5]*10 + a[6])*z== 这个超级长的if 用来检验是否找完9个数和是否符合条件
(a[7]*100 + a[8]*10 + a[9])*y&&
(a[1]*100 + a[2]*10 + a[3])*z==
(a[7]*100 + a[8]*10 + a[9])*x)
print();
else dfs(n + 1);
vis[i] = 0;
}
}
}
int main(){
cin>>x>>y>>z;
dfs(1);
if(f == 0)
cout<<"No!!!"<<endl;
}
题目描述
已知 n个整数 x1,x2,…,x以及1个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3。4个整数分别为3,7,12,19时,可得全部的组合与它们的和为:
3+7+12=22
3+7+19=29
7+12+19=38
3+12+19=34
现在,要求你计算出和为素数共有多少种。
例如上例,只有一种的和为素数:3+7+19=29
输入格式
键盘输入,格式为:
n,k(1≤n≤20,k<n)
x1,x2,…,xn(1≤xi≤5000000)
输出格式
屏幕输出,格式为: 1个整数(满足条件的种数)。
输入输出样例
输入
4 3
3 7 12 19
输出
1
题解
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int ans=0,num=0;
int a[24],n,k;
bool prime(int num)
{
int i;
if(num==2)
return 1;
for(i=2;i<ceil(sqrt(num));i++) 判断是否为素数 只需遍历到num平方根 ceil取整函数
一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n),据此,上述代码中并
不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数
{
if(num%i==0)
return 0;
}
return 1;
}
void dfs(int x,int y)
{
int i;
if(x>k)
{
if(prime(num))
ans++;
return;
}
else
{
for(i=y+1;i<=n;i++)
{
num=num+a[i];
dfs(x+1,i);
num=num-a[i];
}
}
两道深搜,让我秃头。感觉第一道题的深搜,有点神奇(滑稽)。

浙公网安备 33010602011771号