作者VictorTom (鬼翼&娃娃鱼)
看板C_and_CPP
标题Re: [问题] 威力彩!!问题!!
时间Fri Oct 23 10:19:46 2009
※ 引述《bin0622 (小噗子)》之铭言:
: 那我现在这样写↓
: int X,i;
: int Z,a;
: srand(time(0)+getpid());
: for (i=0;i<6;i++){
: X=rand()%38+1;
: printf("%dth:X=%2d\n",i+1,X);
: }
: srand(time(0)+getpid());
: for (a=0;a<1;a++){
: Z=rand()%8+1;
: printf("%dth:Z=%d\n",a+1,Z);
: }
你仔细想想, 第二个回圈只跑一次, 也没有什麽特别判断....
特地用一个回圈去"只产生一个乱数印"这样子有没有意义??
: 那合并了是这样吗?
合并以後是不是这样我们不知道, 你自己要搞清楚作业的要求....
但是先回你前一篇文章的推文那个 printf 的问题....
:printf("%dth:X=%d,%dth:Z=%d\n",i+1,X,Z);
printf()是让你在程式里输出""里的文字....
但是如果只能输出固定的""就太没有弹性了....
所以 %d (当然还有其他的) 就是让你能动态决定要输出的一部份....
而实际要输出的值就在""的第一个 , 之後, 而且依""里的顺序印出....
所以 %d 与 , 是要依序一个萝卜一个坑, 不应该多也不应该少....
你自己的推文里printf有四个%d, , 後面却只有三个变数....
这样子就没有人可以保证你的第四个%d到底会印出什麽东西了....
: srand(time(0)+getpid());
:
: for (i=0;i<6;i++)
: srand(time(0)+getpid());
:
: for (a=0;a<1;a++){
: X=rand()%38+1;
: Z=rand()%8+1;
: printf("%dth:X=%2d,th:Z=%d\n",i+1,a+1,X,Z);
: }
: 这样好像不对!! >O<" 是哪里要改!!
哪里要改, 你写程式与动脑筋的顺序需要改, 像i大推文说的....
现在离开电脑前, 拿一张纸和笔出来, 把整个流程先想清楚....
先想清楚, 写清楚, 甚至画图出来搞清楚了, 再来写程式....
我帮你把引言的部份做一个缩排, 你看一下你的程式会怎麽跑....
要产生威力彩的结果, 简单的逻辑只有两个....
1. 从 1~38 产生六个乱数出来(这还有问题, 後面再讲)
2. 从 1~8 再产生一个乱数出来
所以你想的话分开写七次产生乱数的程式码一样可以写出来....
如果要拆回圈, 1.显然可以放进一个跑六次的回圈来做....
2.本来就只要一个乱数, 有必要跟一个回圈吗??你想做当然也行....
只是有没有意义, 我想的话把2.并到1.的回圈去产生也行....
所以你先能产生六个值在1~38的乱数, 再产生一个值在1~8的乱数....
接着再来想什麽合并; 然後要搞清楚到底是要合并什麽东西....
输出结果合并再一起??还是非要把程式码处理的部份合并在一起??
: 还是printf打错了?
最後还是提醒一下, 威力彩前六个不会有重覆的数字....
而你的程式码这样做, 前面六个数字是有机会重覆的....
==
Edit:
如果你的合并是要能像下面这样子输出....
30 04 15 22 23 37 3
那麽在回圈里就只要产生乱数但先不急着印....
等全部产生完了, 再一次把结果全印出来....
这边有学过array(阵列)的话才会比较好做....
再不然有个取巧的方法, 印数字的时候先不要印换行....
等所有七个数字都印出来再换行, 看起来就像一起印的....
所以我才会问, 何并在一起是要怎样子合并法....
是像上一段那样把输出结果合并在一起印就好....
还是程式码里就要把printf合在一起(但我觉得这不make sense)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.41.4
※ 编辑: VictorTom 来自: 220.134.41.4 (10/23 10:50)
1F:推 bin0622:阵列 还没交.. 就跟之前那样我问的乐透重复没关系.. 10/23 10:53
2F:→ bin0622:只是现再多一组一出来..要再 第一组里面产生第二组 10/23 10:54
3F:→ bin0622:但是..这样一样列出6行.. 10/23 10:54
4F:推 bin0622:这样第二组 也产生6个不是吗? 10/23 10:58
5F:→ bin0622:那我要怎麽写 第二组才会显示1个出来.. 10/23 10:59
6F:→ bin0622:你说的12 23 25 36 24 45 8 这样要怎麽写?这是阵列方式吗 10/23 11:00
7F:→ james732:坦白说看了楼上三篇文章 还是不知道你的确切需求 XD 10/23 11:00
8F:推 bin0622:printf我懂了..谢谢 我需求就是原本只产生6乱数 OK..y 10/23 11:11
9F:→ bin0622:但是威力彩有第二组 只有1~8数字 要在一个回圈里产生这组 10/23 11:13
10F:→ bin0622:也就是v大说的 2并到1回圈产生.. 10/23 11:14
11F:→ VictorTom:那简单的作法是, 你在原来跑六个的回圈里加一个判断, 如 10/23 11:17
12F:→ VictorTom:果回圈跑到第六次了(第六个产生完印好了), 那就再产生一 10/23 11:18
13F:→ VictorTom:个乱数, 只是它在1~8范围内这样. 10/23 11:18
14F:→ VictorTom:要像你6F推的那样输出, 偷鸡的方法就是你printf只印数字 10/23 11:19
15F:→ VictorTom:和空格, 不要换行; 等七个数都印完了再印换行("\n") :) 10/23 11:19
16F:→ VictorTom:Hmm~~回圈都教了, 不至於 if 没有教吧!? 10/23 11:21
17F:推 bin0622:if有... 那我要这样打 if(i=<6)i=<1 是这样吗? 10/23 11:30
18F:→ VictorTom:复习一下条件判断怎麽写吧, 上面那个推文两个operator都 10/23 11:38
19F:→ VictorTom:是错的@_@" 10/23 11:38
20F:推 bin0622:= o = 找不到笔记..没有书.. 我记得那时是写if(i==0) 10/23 11:57
21F:→ chengchieh:"=<" 老师看到不知道是会哭还是会笑... 10/23 14:13
22F:→ chengchieh:用最简单的设7个变数...6个取乱数38...1个取乱数8 10/23 14:14
23F:→ chengchieh:然後一行printf印出...收工 10/23 14:15