求救,有一个C语言程序设计编程题目,请高手帮忙,万分感谢

给我们100张纸,其中20张写着10r,10张-5r,70张-r,把他们装在一个盒子里,等下对其进行随机抽取,现在我们要进行40次试验,每次实验前你都要确定一个R(所谓的R值就是上面提到的小r)值输入,40次以后看看我们的本金是多少。然后现在要C语言编程实现这件事。。。比如你输入的R是10,你抽到了10r,那么你的本金就是100. 抽到-5r就是本金损失-50。抽40次之后40次以后我们的本金会是多少。火速求救。晚上十二点写出之前有效。十一点之前提供完整的c语言程序悬赏再翻倍。。。。

#include <stdio.h>
#include <time.h>
int main()
{
    int s,r;
    int m[100]={0};
    int i,j;
    for(i=0;i<20;i++)
    {
        j=rand()%100;
        if(m[j]==0)
            m[j]=10;
        else
            i--;
    }
    for(i=0;i<10;i++)
    {
        j=rand()%100;
        if(m[j]==0)
            m[j]=-5;
        else
            i--;
    }
    for(i=0;i<70;i++)
    {
        j=rand()%100;
        if(m[j]==0)
            m[j]=-1;
        else
            i--;
    }
    s=0;
    srand((int)time(0));
    for(i=0;i<40;i++)
    {
        printf("\n第%d次,输入R:",i+1);
        scanf("%d", &r);
        j=rand()%100;
        s+=m[j]*r;
        printf("抽到%dr,%s%d,当前本金:%d\n", m[j], m[j]>0?"获得":"损失", m[j]*r, s);
    }
    printf("最终本金:%d", s);
}

前面三个循环主要是随机初始化倍率数组。

追问

你有运行过吗?可以稍微讲一下吗?可以的话双倍

追答

我运行过了。

主要就是先初始化100个倍率数组元素,然后在后面一个40次的循环里,每次都输入一个R,从100个倍率里抽取一个(用随机数的方式),然后用倍率乘以R,就得到这一次是赚还是赔,把结果汇总到变量s上就可以了。

追问

结果截图给我看下。谢谢

追答

追问

能不能根据本金的大小让系统自己分配R值,R值为本金的0.01倍。R值必须取到为50的倍数,本金的初始值为10000,所以初始的R值是100,本金净值一次性上升5000或者下降5000的时候调整R值,每上升一次增加100,每下降一次减少100。如若不然,取其近似值。即如果我们的本金现在是12000,那么R值大概取到100,13000取150.20000的话大概取到200。我愿意追加出到80悬赏金

追答#include <stdio.h>
#include <time.h>
int main()
{
    int s,r,d;
    int m[100]={0};
    int i,j;
    for(i=0;i<20;i++)
    {
        j=rand()%100;
        if(m[j]==0)
            m[j]=10;
        else
            i--;
    }
    for(i=0;i<10;i++)
    {
        j=rand()%100;
        if(m[j]==0)
            m[j]=-5;
        else
            i--;
    }
    for(i=0;i<70;i++)
    {
        j=rand()%100;
        if(m[j]==0)
            m[j]=-1;
        else
            i--;
    }
    s=10000;
    d=0;
    srand((int)time(0));
    printf("初始本金:%d\n",s);
    for(i=1;i<=40;i++)
    {
        if(d>=5000 || d<=-5000)
            r+=d/50;
        else
        {
            r=s/100;
            if(r%50<25)
                r=r-r%50;
            else
                r=(r+25)-(r+25)%50;
        }
        printf("\n第%d次,R:%d\n",i,r);
        j=rand()%100;
        d=m[j]*r;
        s+=d;
        printf("抽到%dr,%s%d,当前本金:%d\n", m[j], m[j]>0?"获得":"损失", d, s);
    }
    printf("最终本金:%d", s);
}

虽然已经过了你的最后时间,还是给你贴一个吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-07

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void main ()

{

int a[100];

int i=40,j;

int R,sum;

for(i=0;i<100;i++)

{

if(i<20) a[i]=10;

else if(i<30) a[i]=-5;

else a[i]=-1;

}

srand((unsigned)time(NULL));

loop: 

printf("请输入你压的R:");

scanf("%d",&R);

sum=0;

for(i=0;i<40;i++)

{ j=rand()%100;

printf("第%d次是:%d\n",i+1,a[j]);

sum+=a[j];

}

printf("40次后你还有多少R:%d\n",sum*R);

printf("任意键继续.....\n");

getch();

goto loop;

}

不知道还行 不行联系我 继续帮你修改

追问

可以稍微讲一下吗?因为是帮别人问的。。我自己有点菜。只是稍微懂

追答

for(i=0;i<100;i++)
{
if(i<20) a[i]=10;
else if(i<30) a[i]=-5;
else a[i]=-1;
}//这边构建了一个a[100]的数组 前20个数是10然后10个-5 70个-1
srand((unsigned)time(NULL));//设定随机数的种子,为调用rand准备
for(i=0;i<40;i++)
{ j=rand()%100;
printf("第%d次是:%d\n",i+1,a[j]);
sum+=a[j];

}//40次循环,每次先j=rand()%100;得到一个0-99的数,及对应数组中的数,将40次的值加一起
printf("40次后你还有多少R:%d\n",sum*R);//最后乘以本金 得到最后的本金

追问

我竟然看懂了。好吧。就等我朋友看还有没有其他的问题

追答

好的

追问

能不能根据本金的大小让系统自己分配R值,R值为本金的0.01倍。R值必须取到为50的倍数,本金的初始值为10000,所以初始的R值是100,本金净值一次性上升5000或者下降5000的时候调整R值,每上升一次增加100,每下降一次减少100。如若不然,取其近似值。即如果我们的本金现在是12000,那么R值大概取到100,13000取150.20000的话大概取到200。我愿意追加出到80悬赏金

追答

那如果本金12000 摇到-1r是不是要陪-100*12000吗?
#include
#include
#include
void main ()
{
int a[100];
int i=40,j;
long int R,r;
for(i=0;i=100) r=R/100-r%100+50;//r的十位比25大时候 比如r=130;20<25 r=13000/100-130%100+50(130-30+50)
else
if(r<=75)r=50;//处理r<100的情况
else r=100;
j=rand()%100;
printf("%d\n",r);
printf("第%d次是:%d\n",i+1,a[j]);
if(a[j]<0) printf("你需要赔:%ld\n",-(R*r*a[j]));
else printf("恭喜你,你的本金增加为:%ld\n",R*r*a[j]);

}

追问

再追问一次系统就会给你5悬赏金了吧。。。其实早上这个我一起来真心没看懂。不过还是谢谢哈

本回答被网友采纳
第2个回答  2013-08-07
这个真难 我语文不好 不好帮你追问

是没有看题目的要求吗