本文主要是介绍第六届蓝桥杯九数分组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
九数组分数
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
5823 / 17469
总结:
首先对于我们知道其工作意图的代码片段,拿到程序后我们首先分析每段代码的不同意义,以及所起的作用
再观察定义的变量所起的范围,在进栈和退栈时保证参数的不改变才能保证之后每一次的正常运行
这篇关于第六届蓝桥杯九数分组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!