随机产生三个数(必须是1~9),它们的和等于某个数(范围是14~19)

算法中需要注意的是第二个数的生成,需要特殊处理。下面的程序在VC++.net下面测试通过:

#include <stdio.h>
#include <time.h>

//
// 随机产生三个数(必须是1~9),它们的和等于某个数(范围是14~19)。
// 第一个参数为这三个数的和(范围是14~19)
// 第二个参数用来输出生成的随机数
//
void GetRandom(int sum, int *num)
{
   int temp;

   srand((unsigned)time(NULL));

   // 产生一个1~9的随机数
   num[0] = 1 + rand() % 8;

   // 然后获得下2个数的产生范围
   temp = sum - num[0];

   if (temp == 18)
   {
      num[1] = num[2] = 9;
   }
   else if (temp > 9)
   {
      // 如果temp > 9,为了保证num[2] <= 9,必须让num[1]在temp-9到9之间。
      num[1] = (temp - 9) + rand() % (18-temp);
   }
   else
   {
      // 如果temp < 9,为了保证num[2] >= 1,必须让num[1]在1到temp-1之间。
      num[1] = 1 + rand() % (temp - 1);
   }

   num[2] = temp - num[1];
}


void main(void)
{
   int num[3] = {0, 0, 0};

   GetRandom(14, num);

   printf("1st number: %d/n", num[0]);
   printf("2nd number: %d/n", num[1]);
   printf("3rd number: %d/n", num[2]);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值