您的位置:首页 > 编程语言 > C语言/C++

1、请编写函数foo(int x, int y, int n) 计算:随机生成x个大小为[1,y]的正整数,它们的和为n的概率是多少?语言仅限于PHP、C/C++、Java中的一种。

2010-10-01 20:04 816 查看
import java.io.IOException;
import java.util.Random;
import java.util.Scanner;

/*
* 创建日期 2010-10-1
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/

/**
* @author zhchyun
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class foo {



public static void main(String[] args) throws IOException {
int x;//输入x的值
int y ;//输入y的值
int n ;//输入n的值
int sum=0;//x个y的和
int count=1;//y的x幂,和出现的情况
Random rand=new Random();//随机生成数
double gailv;//计算概率

System.out.println("请输入x的值");
Scanner sc=new Scanner(System.in);
x=(int)sc.nextInt();
System.out.println("请输入y的值");
y=sc.nextInt() ;
System.out.println("请输入n的值");
n=sc.nextInt() ;

int xx[]=new int[x];
for (int i=0;i<xx.length ;i++){
xx[i]=rand.nextInt(y)+1;
System.out.println("xx["+i+"]:"+xx[i]);
sum=sum+xx[i];


}
for (int i=0;i<x;i++){

count*=y;

}
System.out.println(count);
gailv=(double)1.0/count;
System.out.println(x+"个数的和为:"+sum);
/* 下面是划分情况
1.根据输入n的值划为[-∞,0],[1,x*y](x*y,+∞]
2.考虑到x=1时,是1个[1,y]数的和为y,概率为1/y
3.考虑到y=1时,是x个1的和为x,概率为1/x
*/
if(n<0)
System.out.println(n+"为负数概率为0");
else if (n>x*y)
System.out.println(n+"大于等于"+x*y+"概率为0");
else if (x==1)
System.out.println(n+"等于"+x*y+"概率为"+1.0/y);
else if (n>=1 && n<=x*y && x!=1 && y!=1)
System.out.println("随机生成数和为"+n+"的概率为"+gailv);
else if (y==1)
System.out.println(x+"个"+"[1,"+"y]"+"数"+"随机生成数和为"+n+"的概率为"+1.0/x);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐