J
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
// 总结一下 写一个递归函数就是反推
// 首先确定最里面的一层递归如何返回
// 随后 再确定 如何进入到最里面一层的递归
// 最后确定 最外层要如何进入递归
// 以本题为例 确定当x为1或2是最里层 直接返回对应答案
// 再确定 当x为4或2时 会进入最里层
// 最后确定 整个递归的过程是每轮分解最高次幂 就是最高的次数作为最外层进入递归
void dfs(int x){
if (x==1) {
cout<<"2(0)";
return ;
}
if (x==2){
cout<<"2";
return ;
}
//确定当x为1或2是最里层 直接返回对应答案
int z=1<<15;
for (int i=15;i>=0;i--){
if (x>>i&1){
if (i!=1&&i!=0) {
cout<<"2(";
dfs(i);
//最后确定 整个递归的过程是每轮分解最高次幂 就是最高的次数作为最外层进入递归
}
else dfs(1<<i);
//当x为4或2时 会进入最里层
x-=1<<i;
if (i!=1&&i!=0) cout<<")";
if (x>0)cout<<"+";
}
}
}
int main (){
int n;
while (scanf ("%d",&n)!=EOF){
dfs(n);
cout<<'\n';
}
return 0;
}
I
循环实现
#include <iostream>
#include <cstdio>
using namespace std;
int st[90];//记录每个位置的3种状态
int n,a[111];
long long t;
int ans=0;
int main (){
scanf("%d", &n);;
for (int i = 0; i < n; i ++ ){
scanf ("%d",&a[i]);
}
scanf ("%lld",&t);
for (int i=1;i<1<<n;i++){
int cnt,v[29];
long long sum;
sum=cnt=0;
for (int j=0;j<n;j++){
if (i>>j&1){
sum+=a[j];
v[cnt++]=j;
}
}
if (sum==t&&cnt>0){
ans++;
for (int j=0;j<cnt;j++){
cout<<a[v[j]]<<' ';
}
cout<<'\n';
}
}
cout<<ans;
return 0;
}
递归实现
#include <iostream>
#include <cstdio>
using namespace std;
int st[90];//记录每个位置的3种状态 1选 2不选 0未确定
int n,a[111];
long long t;
int ans=0;
void dfs(int u){
int i;
if (u==n) {
long long sum=0;
int v[26],cnt=0;
long long z=1;
for (int i=n-1,j=0;i>=0;i--,j++){
if (st[i]==1){
v[cnt++]=a[j];
sum+=a[j];
}
}
if (sum==t&&cnt>0) {
ans++;
for (int i=0;i<cnt;i++){
cout<<v[i]<<' ';
}
cout << endl ;
}
return ;
}
else {
st[u]=2;
dfs(u+1);
st[u]=0;
st[u]=1;
dfs(u+1);
st[u]=0;
}
}
int main (){
scanf("%d", &n);;
for (int i = 0; i < n; i ++ ){
scanf ("%d",&a[i]);
}
scanf ("%lld",&t);
dfs(0);
cout<<ans;
return 0;
}
H
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
string s;
void my_reverse(int u){
if (u<n/2){
swap(s[u],s[n-u-1]);
cout<<s<<'\n';
my_reverse(u+1);
return ;
}
else return ;
}
int main()
{
scanf("%d", &n);
cin>>s;
//cout<<s<<'\n';
my_reverse(0);
puts("");
cout<<s<<'\n';
return 0;
}
G
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int p2[5]={1,3,5,7,9};
bool check(int x){
for (int i=2;i<=x/i;i++){
if (x%i==0) return 0;
}
return 1;
}
void dfs(int u,int now){
if (u==n){
printf ("%d\n",now);
return ;
}
for (int i=0;i<5;i++){
if (check(now*10+p2[i])){
dfs(u+1,now*10+p2[i]);
}
}
return ;
}
int main()
{
scanf("%d", &n);
dfs(1,2);
dfs(1,3);
dfs(1,5);
dfs(1,7);
return 0;
}
F
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,a[100010];
int s[100010];
int main()
{
scanf("%d", &n);
int mxa=-1e9;
for (int i = 1; i <= n; i ++ ){
scanf("%d", &a[i]);
int t=0;
t+=a[i];
if (t<0){
t=0;
mxa=max(mxa,t);
}
else mxa=max(mxa,t);
//s[i]=s[i-1]+s[i];
}
cout<<mxa;
return 0;
}
E
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
string s;
string i_s(int x){
string u;
while (x){
u+=x%10+'0';
x/=10;
}
reverse(u.begin(),u.end());
return u;
}
string dfs_a(int l,int r){
string u="sin(";
if (l==r) {
u+=i_s(r);
u+=')';
return u;
}
u+=i_s(l);
if (l%2){
u+='-';
}
else u+='+';
u+=dfs_a(l+1,r);
u+=')';
return u;
}
void Sn(int u){
for (int i=1;i<n;i++) s+='(';
for (int i=1;i<=u;i++){
// s+='a';
// s+=i_s(i);
s+=dfs_a(1,i);
s+='+';
s+=i_s(u-i+1);
if (u-i+1>=2) s+=')';
}
}
int main()
{
scanf("%d", &n);
Sn(n);
cout<<s;
return 0;
}
D
#include<iostream>
using namespace std;
int main()
{
int a;
scanf ("%d",&a);
int v[4];
int cnt=0;
while (a){
v[cnt++]=a%10;
a/=10;
}
for (int i=cnt-1;i>=0;i--){
printf ("%d ",v[i]);
}
return 0;
}
C
#include<iostream>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
cout<<a<<b;
return 0;
}
B
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int main (){
long long n;
scanf ("%lld",&n);
int p=1;
for (long long i=2;i<=n/i;i++){
if (n%i==0) {
p=0;
break;
}
}
if (p) puts("prime");
else puts("not prime");
}
A
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int n;
long long f[110];
int main (){
f[1]=1,f[2]=2,f[3]=3;
for (int i=4;i<=59;i++){
f[i]=f[i-1]+f[i-3];
}
while (scanf ("%d",&n)!=EOF){
if (n==0) break;
printf ("%lld\n",f[n]);
}
}
这是什么题集啊
学校培训的题目😂