求大神指点一下算法,就加法的问题

问题描述

求大神指点一下算法,就加法的问题


如图,求大神指点

解决方案

哎哎哎我也是给自己醉了居然循环了两次。现在应该可以了。采纳啊亲 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;
}

解决方案二:

最小数字是0.5
6=12_*0.5
也就是说所有数最多放12份
然后就是排列组合的
穷举法进行验证

解决方案三:

如果数据不大的情况下
可以先把输入的数据a[]先排个序,然后用队列,每一次加上a[i],如果加上的值小于所期望的值,则把它push回队列,超过了则抛弃,循环直到队列为空

解决方案四:

 #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, double lastValue){
    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++){
            if(arry[k] >= lastValue) {
                inpath[step] = arry[k];
                getResult(sum, index, currSum + arry[k], inpath, step + 1, NumOfdata, arry[k]);
            }
            else continue;
        }
    }
    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);
    for(i = 0; i < NumOfdata; i++){
        init();
        getResult(Sum, i, 0, inpath, 0, NumOfdata, 0);
    }
    return 0;
}

解决方案五:

思路:
比如有数据:A、B、C、D、E、F、G、H、、、、
用循环比较:(1)把A拿出来和B相加,如果等于6,就记录下这两个数,不等于6,就和C相加;后面依次。
第一轮循环完成后 (2)第二轮循环,就把B拿出来,和C相加,如果等于6,就记录下这两个数,后面依次。
。。。。。。。。。

解决方案六:

出错了呢,怎么了呢

解决方案七:


程序是好的,可能编译器的问题?我用的是Cfree。

时间: 2024-10-03 02:35:09

求大神指点一下算法,就加法的问题的相关文章

跪求大神指点java算法

问题描述 跪求大神指点java算法 如何实现1+21+31+42+32+43+41+2+3.........的不规则加法,加的位数不确定 解决方案 这既是找规律,这就是1234...n的排列组合,你找个组合的算法,计算出各种组合,然后每个组合中的数相加

c语言-BP算法的C语言实现,代码个人测试正确, 但是wrong answer, 求大神指点

问题描述 BP算法的C语言实现,代码个人测试正确, 但是wrong answer, 求大神指点 #include #include #include #include #include //#include "user.h" #include #include #include #include #include #include #define _CRT_SECURE_NO_WARNINGS #define _USE_MATH_DEFINES using namespace std;

C语言,寻找二维数组鞍点,代码个人测试正确, 但是wrong answer, 求大神指点

问题描述 C语言,寻找二维数组鞍点,代码个人测试正确, 但是wrong answer, 求大神指点 Description 给定一个海拔平面图,相当于一个二维数组,数组的每个元素表示一个点的海拔高度.请判断该图中是否存在鞍点,如果存在,则输出该鞍点的位置,即行.列坐标. 本题规定鞍点的定义为:该点的值在它所在的那行中是唯一最大的,且该点的值在它所在的那列中是唯一最小的. Input 输入有多个测试用例,如果把每个测试用例看作一个"块",那么,在一个"块"中: 第一行

图形学代码改写和注释-图形学大神看过来,求大神指点

问题描述 图形学大神看过来,求大神指点 一.实现抛物线算法的C语言程序段如下: Par(int xs,int ys,int xm,int ym,int xe,int ye) //已知起点.中点和终点三个控制点的坐标 { double t,dt,ax,ay,bx,by,cx,cy; int n,i; ax=xe-2*xm+xs; ay=ye-2*ym+ys; bx=2.0*(xm-xs); by=2.0*(ym-ys); cx=xs; cy=ys; n=sqrt(ax*ax+ay*ay); n=s

超时-c语言求组合数,但是超了,求大神指点!

问题描述 c语言求组合数,但是超了,求大神指点! 我用递归写出了求组合数,c(5,3),c(6,2)之类的能算出来,但是c(1024,512)这种大数就算不出来了,超时很严重,而且取模之后也不行,求大神们指点啊!!谢谢!! 解决方案 它只问多少种,没有让你列出多少种,这是数学问题不是编程问题.直接套公式. 解决方案二: c(1024,512)没有任何算法能做到. C(100, 50)已经达到10^29了,而C(1024,512)几乎是天文数字. 假设计算机每秒能计算1万亿次,每次计算都直接输出一

opengl-计算机图形学OpenGL的问题,急求大神指点

问题描述 计算机图形学OpenGL的问题,急求大神指点 用多边形逼近算法花了一个多边形,然后需要修改一个点的坐标,让其不规则,请问如何修改一个点的坐标?逼近算法如下: void COpenGLView::BiJin(int radius,Ploygon *ploygon) { int i,n; float x,y,xnew,ynew,alfa,co,si; alfa=2*acos(((float)radius-DELTA)/(float)radius); n=(int)(2*3.14159/al

strlen-ACM简单的字符串匹配,但老是OJ通不过,求大神指点

问题描述 ACM简单的字符串匹配,但老是OJ通不过,求大神指点 Description 给出两个字符串S和T,请判断T是否为S的子串.本题请用"简单匹配法"来做. 使用strstr函数,判cheat Input 第一行是一个整数N,说明有多少个测试用例. 接下来是N个测试用例,每个测试用例占2行:第一行是字符串S,第二行是字符串T,字符串中不含空格. 1 ≤ strlen(S) , strlen( T ) ≤ 10000 Output 对每个测试用例,输出一行结果:是否子串,是则输出&

c语言 声音处理-求大神指点一下声音处理

问题描述 求大神指点一下声音处理 请问一下,接受声音,然后从里面提取出某一特定声音,然后计算出现的次数.想问一下这一过程的思路是怎么样,都要用到什么呀 解决方案 声音识别算法http://wenku.it168.com/d_001381390.shtml 解决方案二: 这个可能有很大的难度. 声音识别,因为声音的数据完全相同是不太可能的.否则,可以从数据入手.

acm的c语言扫雷编程题目,求大神指点

问题描述 acm的c语言扫雷编程题目,求大神指点 解决方案 这是输出的部分,待会附上我的代码 解决方案二: 你是要找人代写,还是说代码需要debug? 解决方案三: 这是哪个acm平台呀,这个算法应该就是算临域,完后计数加加的吧 解决方案四: 问题出在最后和标准差个空格 #include #include #include int main(){ int c,b,i,j; int x=1; char a[1000][1000]; while(scanf("%d%d",&c,&a