试探法算法思想

博客围绕彩票7位组合问题展开,解题思路是从最低位开始排数,最后一位排完数值后向前进一位,通过递归调用生成组合,还附带了解题代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例一彩票的组合问题(7位)(不定时补充)(题目来源于《零基础学算法》)
解题思路:
在彩票的位数上,我们考虑从最低位开始进行排数,当最后一位拍完数值后,向前进一位,进行同样的操作,
如下图片所示:
样例输出
在图片中,我们可以发现,首先变化最后一位,当最后一位数位1的时候,位数向前进一位,通过这样的递归的调用,就可以生成组合了。(代码中有解释)
代码附带


#include<stdio.h>
#define MAXN 7//彩票的位数 
#define NUM 10//设置组成彩票的数字 

int num[NUM];
int lottery[MAXN];

 int main()
 {
  int i,j;
  for(i = 0;i < NUM;i++)
  {
   num[i] = i+1;//赋值彩票的数字大小 
 }
 for(i = 0;i < MAXN;i++)
 {
  lottery[i] = 0;//将组合清空,初始化为零 
 }
 combine(NUM,MAXN);//函数的调用 

 return 0; 
 }
void combine(int n,int m)
{
 int i, j;
 for(i = n;i >= m;i--)
 {
  lottery[m-1] = num[i-1];//保存一位数字
   
  if(m>1)
  {
   combine(i-1,m-1);
  }
  else//m==1即向前移动一位 与输出一组号码
  {
   for(j = MAXN-1;j >= 0;j--)//打印每一组组合 
   {
    printf("%2d",lottery[j]);
   }
   getchar();//回车运行 。每按一次出来一组数据 
   printf("\n");
  }
 }
 }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值