扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
使用结构体链表模拟彩票的摇奖机,来保证每次随机都是不同的数字。
创新互联公司2013年成立,先为永定等服务建站,永定等地企业,进行企业商务咨询服务。为永定企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
数组也可以模拟,但是删除元素比较麻烦,用链表更快捷。
定义数组指针,动态分配内存。
#include stdio.h
#include stdlib.h
#include time.h
typedef struct List {
int number;
struct List*next;
} ArrayList;
ArrayList*createList(int);//创建链表,参数是链表的节点数
void freeList(ArrayList*);//循环释放所有节点的内存
int deleteNode(ArrayList*,int);//删除节点,返回节点的数据
main() {
//动态创建内存
int*numbers=(int*)calloc(7,sizeof(int));
int*inNumbers=(int*)calloc(7,sizeof(int));
//动态创建数组链表存放1-33个编号
ArrayList*balls= createList(33);
int i;
srand((unsigned)time(NULL));
printf("请输入7个不同的数字(1-33):\n");
for(i=0; i7; i++) {
*(numbers+i)=deleteNode(balls,rand()%(33-i));
scanf("%d",inNumbers+i);
}
printf("随机产生的7个数字是:\n");
for(i=0; i7; i++) {
printf("%d ",*(numbers+i));
}
printf("\n相同的数字:\n");
//查找
int j;
for(i=0; i7; i++) {
for(j=0; j7; j++) {
if(*(numbers+i)==*(inNumbers+j)) {
printf("%d ",*(numbers+i));
break;
}
}
}
//释放内存
free(numbers);
free(inNumbers);
freeList(balls);
}
ArrayList*createList(int n) {
ArrayList*head=NULL,*end=NULL,*node=NULL;
end=head=(ArrayList*)malloc(sizeof(ArrayList));//head在删除和插入节点时有用。 不能删除head,也不能插入到head前面
int i;
for(i=1; i=n; i++) {
node=(ArrayList*)malloc(sizeof(ArrayList));
node-number=i;
end-next=node;
end=node;
}
end-next=NULL;
return head;
}
void freeList(ArrayList*head) {
ArrayList*node=head;
while(head!=NULL) {
head=head-next;
free(node);
node=head;
}
}
int deleteNode(ArrayList*head,int index) { //index节点索引(0-32),返回被删除的球的编号
ArrayList*node=head-next,*temp=head;
int i=0,number;
while(iindexnode!=NULL) {
temp=node;
node=node-next;
i++;
}
if(node!=NULL) {
number=node-number;
temp-next=node-next;
free(node);
}
return number;
}
运行结果
前算法没错、
C(3,30) 的算法数字表述是多少?是不是 30*29*28 ?
不是,是 30*29*28 /3!
3个红球的概率: (30/90)* (29/89)*(28/88)
3个不同颜色球概率: (30/90)*(30/89)*(30/88)
前面对、后面错、、、因为你后面规定了球的顺序、、非要这样做的话是这样的、、第一个球随便取、概率1 第二个球、除了第一种球的颜色 概率60/89 第三个球、除了前两种的颜色,概率30/88 所以概率为1*60/89*30/88、、、、、、、其实就是你的答案再乘上3!让3个不同颜色的球任意排列就行、、、、
可能有点乱、、不明白的地方追问下、、
第一题:题目不是很明确。我觉得答案是0.7
第二题:
#includestdio.h
void main()
{
int red,yellow,green;
for(red=0; red=3; red++)
for(yellow=0; yellow=3; yellow++)
for(green=0; green=6; green++)
{
if(red+yellow+green == 8)
printf("红色:%d,黄色:%d,绿色:%d\n",red,yellow,green);
}
return;
}
第三题:
#includestdio.h
#includemath.h
void main()
{
long one,two,three;
long n;
for(n=100000; n1000000; n++)
{
one = (int)sqrt(n);
two = (int)sqrt(n/1000);
three = (int)sqrt(n%1000);
if((one*one == n) (two*two == (n/1000)) (three*three == (n%1000)))
printf("%d是一数三平方:\n %d=%d*%d, %d=%d*%d, %d=%d*%d\n",n,n,one,one,n/1000,two,two,n%1000,three,three);
}
return;
}
C语言是编程中的基础,如果你是想制作网络游戏,那么C语言是不可缺少的。因为网络游戏依赖高效率的服务程序来控制。如果是自学C语言的话,要做好吃苦的准备.我推荐学习C语言的书籍是:CPrimerPlus中文版开发工具是:VS2008或者VS2010你也百度一下,80X86汇编小站网站里面有篇文章是写给C/C++语言初学者的.标题是:如何正确的入门Windows系统下C/C++学习领域.希望这篇文章对你有帮助,其实入门学习C语言,重要的是选择一本好书和一个好的开发工具,如果有条件可以配备一个老师,这样你学习效率将会有很大的提升,当然最重要还是你的学习态度和毅力.
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流