-1

搞清楚这个有点麻烦,我有一堆 int 变量,它们生成 1-9 的随机数。我需要他们生成正确的数字以等于某个数字,例如 30。

int numone = rand()%10;
int numtwo = rand()%10;
int numthree = rand()%10;
int numfour = rand()%10;
int finalsum;

do{
finalsum = numone + numtwo + numthree + numfour;
}while(finalsum !=30);

我不确定我是否以正确的方式进行此操作,但是当我尝试编译上述代码时,我什至没有得到一个数字,有时我会收到“超出时间限制”错误,可能花费的时间太长。还有其他方法可以做到这一点吗?

4

3 回答 3

3

好吧,我希望你意识到,在你的 do while 循环中,你实际上并没有改变随机数的值。你所做的基本上是检查finalsum = numone + numtwo + numthree + numfour;无限的相同条件,如果它不等于 30。你应该做的是:

int numone,numtwo,numthree,numfour,finalsum;
do{
numone=rand()%10;
numtwo=rand()%10;
numthree=rand()%10;
numfour=rand()%10;
finalsum = numone + numtwo + numthree + numfour;
}while(finalsum !=30);
于 2013-09-09T03:19:13.583 回答
2

将其rand()移入 while 循环,否则您将只生成一次随机数,并陷入 while 循环。

do{
int numone = rand()%10;
int numtwo = rand()%10;
int numthree = rand()%10;
int numfour = rand()%10;
int finalsum;
finalsum = numone + numtwo + numthree + numfour;
}while(finalsum !=30);
于 2013-09-09T03:11:03.123 回答
0

结果获得“30”的机会非常小。您也不会得到从 1 到 9 的随机数,而是从 0 到 9 得到它们。

试试这个:

int numone,numtwo,numthree,numfour, finalsum;
do
{
   do
   {
     numone = 1+rand()%9;
     numtwo = 1+rand()%9;
   } while (numone+numtwo < 12);
   numthree = 1+rand()%9;
} while (numone+numtwo+numthree < 21);
numfour = 30-(numone+numtwo+numthree);
// for clarity
finalsum = numone + numtwo + numthree + numfour;

(编辑)经过一些横向思考:numthree需要介于30-1-(numone+numtwo)30-9-(numone+numtwo)之间——也许那里还有进一步优化的空间。

(进一步编辑)经过下面的审议,我实际测试了它,确实,这符合要求:

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>

int main (void)
{
  int numone,numtwo,numthree,numfour, finalsum;
  int i;

  srand(time(NULL));

  for (i=0; i<100; i++)
  {
    numone = 3+rand()%7;
    if (numone == 3)
      numtwo = 9;
    else
      numtwo = 12-numone+rand()%(7-(9-numone));
    if (numone + numtwo == 12)
      numthree = 9;
    else
      numthree = 21-(numone+numtwo)+rand()%(6-(18-(numone+numtwo)));
    numfour = 30 - (numone + numtwo + numthree);

    finalsum = numone + numtwo + numthree + numfour;
    printf ("%d + %d + %d + %d = %d\n", numone, numtwo, numthree, numfour, finalsum);
  }
}
于 2013-09-09T14:53:31.220 回答