7条回答 默认 最新
- cxlovu 2015-10-29 06:58关注
哎哎哎我也是给自己醉了居然循环了两次。现在应该可以了。采纳啊亲 TAT
- #include<stdio.h>
- #include<math.h>
- double arry[10];
- double inpath[55];
- void init(){
- for(int i = 0; i < 100; i++)
- inpath[i] = 0;
- }
- // 快速排序,升序排序
- void quiksort(double a[],int low,int high)
- {
- int i = low;
- int j = high;
- double temp = a[i];
- if( low < high)
- {
- while(i < j)
- {
- while((a[j] >= temp) && (i < j))
- {
- j--;
- }
- a[i] = a[j];
- while((a[i] <= temp) && (i < j))
- {
- i++;
- }
- a[j]= a[i];
- }
- a[i] = temp;
- quiksort(a,low,i-1);
- quiksort(a,j+1,high);
- }
- else
- {
- return;
- }
- }
- void getResult(double sum, int index, double currSum, double *inpath,
- int step, int NumOfdata){
- int j,k;
- if(fabs(currSum - sum) < 1e-6){
- for(j = 0; j < step - 1; j++){
- printf("%lf", inpath[j]);
- printf("+");
- }
- printf("%lf", inpath[j]);
- printf("\n");
- return ;
- }else if(sum - currSum > 1e-3){
- for(k = index; k < NumOfdata; k++){
- inpath[step] = arry[k];
- getResult(sum, k, currSum + arry[k], inpath, step + 1, NumOfdata);
- }
- }
- else return ;
- }
- int main(){
- int i;
- double Sum;
- printf("输入的数据个数:");
- int NumOfdata;
- scanf("%d", &NumOfdata);
- printf("输入数据:");
- for(i = 0; i < NumOfdata; i++)
- scanf("%lf", &arry[i]);
- quiksort(arry, 0, NumOfdata - 1);
- printf("输入期望的和:");
- scanf("%lf", &Sum);
- init();
- getResult(Sum, 0, 0, inpath, 0, NumOfdata);
- return 0;
- }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 为什么树莓派5b显示禁止连接
- ¥20 流量太费!寻找便宜的app音视频SDK或平替方案。
- ¥15 kubeasz部署遇到问题
- ¥15 GUIDE to App Designer Migration Tool for MATLAB
- ¥50 第三代非支配排序遗传算法(NSGA-Ⅲ)和多目标粒子群优化算法(MOPSO)的实现
- ¥20 plant simulation与python com接口实时数据交互
- ¥15 有关汽车的MC9S12XS128单片机实验
- ¥15 求c语言动态链表相关课程有偿,或能将这块知识点讲明白
- ¥15 FLKT界面刷新异常
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证