m0_67589500 2022-11-14 15:37 采纳率: 100%
浏览 107
已结题

关于#C语言#的问题,如何解决?

某股民投资某证券,购入该证券时间作为起始点0,当天的盈亏也定为0。假定证券价格每个交易日的变化有三档:比前一个交易日上涨1个单位,与前一个交易日持平,比前一个交易日下跌1个单位。
该股民对其持有证券的收益期望值是k个单位。即:只要该证券的价格比其购入的价格高k个单位,他就会卖出该证券获利了结;反之,如果没有达到预期的利润,他就会继续持有该证券,持有的天数最多为N个交易日。在第N个交易日,股民已经失去了耐心,无论是否达到收益预期,证券都会被该股民卖出。
有没有人给个思路,用C语言

  • 写回答

2条回答 默认 最新

  • Votre Citron 2022-11-20 15:54
    关注

    (一)蛮力法

    #include<stdio.h>
    #include<iostream>
    using namespace std; 
    int num[3]={1,0,-1};
    int paths[1000][1000];
    int len[1000]={0};
    int index=0;
    int target=0;
    void dfs(int n,int step,int sum,int path[])
    {    
        if(step>n)
        return;
        if(sum==target)
        {
            int i=0;
            for(;i<step;i++)
                {
                    paths[index][len[index]++]=path[i];
                }
            index++;
            return;
        }
        int i=0;
        for(i;i<3;i++)
        {    
            path[step]=num[i];
            dfs(n,step+1,sum+num[i],path);
        }
        return;
    }
    int main()
    {    
        int n,path[1000]={0};
        scanf("%d %d",&n,&target);
        dfs(n,0,0,path);
        int i=0,j=0;
        for(i=0;i<index;i++)
        {    
            for(j=0;j<len[i];j++)
            {
                printf("%d ",paths[i][j]);
            }
            printf("\n");
        }
        printf("count=%d",index);
        return 0;
    }
    

    (二)递归回溯法

    #include<stdio.h>
    #include<iostream>
    #include<vector>
    using namespace std;
    int num[3]={1,0,-1};
    int paths[1000][1000];
    int len[1000]={0};
    int index=0;
    int target=0;
    void backtracking(int n,int step,int sum,vector<int>path)
    {    
        if(step>n)
        return;
        if(sum==target)
        {   int i=0;
            for(;i<step;i++)
                {
                    paths[index][len[index]++]=path[i];
                }
            index++;
            return;
        }
        int i=0;
        for(i;i<3;i++)
        {    
            int tempsum=sum+num[i];
            if(tempsum+n-step-1>=target)
            {    
                path.push_back(num[i]);
                backtracking(n,step+1,tempsum,path);
                path.pop_back();
            }
        }
        return;
    }
    int main()
    {    
        int n;
        vector<int>path;
        scanf("%d %d",&n,&target);
        backtracking(n,0,0,path);
        int i=0,j=0;
        for(i=0;i<index;i++)
        {    
            for(j=0;j<len[i];j++)
            {
                printf("%d ",paths[i][j]);
            }
            printf("\n");
        }
        printf("count=%d",index);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月27日
  • 提问应符合社区要求 11月16日
  • 创建了问题 11月14日

悬赏问题

  • ¥30 求给定范围的全体素数p的(p-2)的连乘积
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页