69,382
社区成员
发帖
与我相关
我的任务
分享
//n个(2<=n<=20)整数(整数范围-10<=x<=10),判断是否可以从这n个数中找到若干个数,其和为10
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <algorithm>
using namespace std;
int MAXN=20;
int MINN=2;
int x[20];
int n,i,j,k,sum;
int main() {
srand((unsigned)time(NULL));
n=MINN+rand()%(MAXN-1);
for (i=0;i<n;i++) {
x[i]=-10+rand()%21;
printf("%d,",x[i]);
}
printf("\n");
sort(&x[0],&x[n]);
do {
for (i=2;i<=n;i++) {
sum=0;
k=n/2-i/2;
for (j=k;j<k+i;j++) {
sum+=x[j];
}
if (10==sum) {
for (j=k;j<k+i;j++) {
if (j==k+i-1) {
printf("%d==10\n",x[j]);
} else {
printf("%d+",x[j]);
}
}
printf("YES\n");
return 1;
}
}
} while (next_permutation(&x[0],&x[n]));
printf("NO\n");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int n=6, input;
int num[n] = {1, 2, 3, 4, 5, 6};
int find(int flag)
{
int sum,s;
for(int i=0;i<n;i++){
sum=0;
s=0;
for(int k=i;k<n;k++{
s+=num[k];
if(flag==sum) return 1;
for(int j=k+1;j<n;j++){
sum=s+num[j];
if(flag==sum) return 1;
}
}
}
return 0;
}
int main()
{
scanf("%d", &input);
if(find(input)){
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
#include <stdio.h>
#include <stdlib.h>
int n=6, m, input;
int rcd[6], num[6] = {1, 2, 3, 4, 5, 6};
int find(int l, int p)
{
int i, sum;
if (l == m) {
for (i=0, sum=0; i<m; i++) sum += rcd[i];
if (sum == input) puts("yes"), exit(0);
return 0;
}
for (i=p; i<=n-(m-l); i++) {
rcd[l] = num[i];
find(l+1, i+1);
}
}
int main()
{
scanf("%d", &input);
for (m=1; m<=6; m++) find(0, 0);
}