題目要求輸入幾次測資就輸出多少個YES或NO不是嗎
這是我的CODE 希望大家可以指點我
#include <stdio.h>
#include <stdlib.h>
void backtrack(int*,int*,int,int,int,int,int*);
int main()
{
int t;
int n,p;
int*arr;
int*use;
int*ans;
int find;
int i,j;
while(scanf("%d",&t)!=EOF)
{
ans=(int*)calloc(t,sizeof(int));
for(i=0;i<t;i++)
{
find=0;
scanf("%d",&n);
scanf("%d",&p);
arr=(int*)malloc(sizeof(int)*p);
use=(int*)calloc(p,sizeof(int));
for(j=0;j<p;j++)
scanf("%d",arr+j);
backtrack(arr,use,0,p,n,0,&find);
if(find==1)
ans[i]=1;
free(use);
free(arr);
}
for(i=0;i<t;i++)
{
if(ans[i]==1)
printf("YES\n");
else
printf("NO\n");
}
free(ans);
}
return 0;
}
void backtrack(int*arr,int*use,int total,int p,int n,int dimen,int*find)
{
int i;
if(n==0)
*find=1;
else
{
for(i=dimen;i<p;i++)
{
if(use[i]==0)
{
total=total+arr[i];
if(total==n)
{
*find=1;
break;
}
backtrack(arr,use,total,p,n,i+1,find);
total=total-arr[i];
use[i]=0;
}
}
}
}
題目要求輸入幾次測資就輸出多少個YES或NO不是嗎
這是我的CODE 希望大家可以指點我
#include
#include
void backtrack(int*,int*,int,int,int,int,int*);
int main()
{
int t;
int n,p;
int*arr;
int*use;
int*ans;
int find;
int i,j;
scanf("%d",&t);
ans=(int*)calloc(t,sizeof(int));
for(i=0;i<t;i++)
{
find=0;
scanf("%d",&n);
scanf("%d",&p);
arr=(int*)malloc(sizeof(int)*p);
use=(int*)calloc(p,sizeof(int));
for(j=0;j<p;j++)
scanf("%d",arr+j);
backtrack(arr,use,0,p,n,0,&find);
if(find==1)
ans[i]=1;
free(use);
free(arr);
}
for(i=0;i<t;i++)
{
if(ans[i]==1)
printf("YES\n");
else
printf("NO\n");
}
free(ans);
return 0;
}
void backtrack(int*arr,int*use,int total,int p,int n,int dimen,int*find)
{
int i;
if(n==0)
*find=1;
else
{
for(i=dimen;i<p;i++)
{
if(use[i]==0)
{
total=total+arr[i];
if(total==n)
{
*find=1;
break;
}
backtrack(arr,use,total,p,n,i+1,find);
total=total-arr[i];
use[i]=0;
}
}
}
}
太瞎了吧
把while(scanf("%d",&t)!=EOF)的while去掉就可以ac了
這樣題目算是有問題嗎