请把下面C++代码转换为C语言:#include <iostream> #include <bits/stdc++.h> using namespace std; int arr[100]; //保存选了哪个,方便最后输出 bool flag[100]; //当前的累加值 int present_value=0; int n,sum; //用来判断有没有最终的解 bool isHasFinal=false; //递归回溯 void find_sum(int i) { //因为我的输入是从0 开始的,所以== 就可以了,如果输入是数组下标1开始的 //则需要i>n来判定 if(i==n) return; flag[i]=true; present_value+=arr[i]; if(present_value == sum) { for(int j=0;j<n;j++) { if(flag[j]) { cout<<arr[j]<<" "; } } isHasFinal=true; cout<<endl; } else if(present_value<sum) { find_sum(i+1); } //回溯 flag[i]=false; present_value-=arr[i]; find_sum(i+1); return; } int main() { cin>>n>>sum; memset(flag,0,sizeof(flag)); for(int i=0;i<n;i++) { cin>>arr[i]; } find_sum(0); if(!isHasFinal) { cout<<"No Solution!"; } return 0; }
时间: 2024-01-24 17:02:39 浏览: 67
vc2019中 源文件<bits/stdc++.h>无法打开
以下是将给定的C++代码转换为C语言的代码:
```c
#include <stdio.h>
#include <string.h>
int arr[100]; // 保存选了哪个,方便最后输出
int flag[100]; // 当前的累加值
int present_value = 0;
int n, sum;
// 用来判断有没有最终的解
int isHasFinal = 0;
// 递归回溯
void find_sum(int i)
{
// 因为我的输入是从0开始的,所以==就可以了,
// 如果输入是数组下标1开始的,则需要i>n来判定
if (i == n)
return;
flag[i] = 1;
present_value += arr[i];
if (present_value == sum)
{
for (int j = 0; j < n; j++)
{
if (flag[j])
{
printf("%d ", arr[j]);
}
}
isHasFinal = 1;
printf("\n");
}
else if (present_value < sum)
{
find_sum(i + 1);
}
// 回溯
flag[i] = 0;
present_value -= arr[i];
find_sum(i + 1);
return;
}
int main()
{
scanf("%d%d", &n, &sum);
memset(flag, 0, sizeof(flag));
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
find_sum(0);
if (!isHasFinal)
{
printf("No Solution!");
}
return 0;
}
```
阅读全文