第六届蓝桥杯九数分组

32 篇文章 0 订阅

九数组分数
1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
#include <stdio.h>

void test(int x[])
{
	int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
	int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
	
	if(a*3==b) printf("%d / %d\n", a, b);
}

void f(int x[], int k)
{
	int i,t;
	if(k>=9){
		test(x);
		return;
	}
	
	for(i=k; i<9; i++){
		{t=x[k]; x[k]=x[i]; x[i]=t;}
		f(x,k+1);
		_____________________________________________ // 填空处
	}
}
	
int main()
{
	int x[] = {1,2,3,4,5,6,7,8,9};
	f(x,0);	
	return 0;
}



拿到这道题后,我首先的是分析程序的执行过程
在第一个函数的test中是对分子和分母是否满足关系的验证
在函数  f()中if判断语句也是对函数的验证    以及关注对于局部变量的定义,我发现 i 是用作循环的实体,而 t 是在交换数中产生一个中间变量,接着又是一个递归调用  f(x,k+1)。由于前期  k的值始终没有大于等于9,所以不执行,而对于大于9的不满足条件的直接return 出去,由于始终是递归调用,我们采用调试,分别在参数改变的地方加入断点,观察当大于9之后,会开始减小,也就是退栈(数据结构中的栈),并且控制没有满足的数值输出
数值再次减小但是之前每次在 t 交换的参数的变量并不属于之前的变量的值,所以我们应该将之前的值再次恢复,即再次swap(x[i],x[k]),此时Debug发现控制台由数值输出,表示我们成功





答案
填空处填写  t = x[i]; x[i] = x[k]; x[k] = t;

5832 / 17496
5823 / 17469

总结:
      首先对于我们知道其工作意图的代码片段,拿到程序后我们首先分析每段代码的不同意义,以及所起的作用
      再观察定义的变量所起的范围,在进栈和退栈时保证参数的不改变才能保证之后每一次的正常运行


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值