第六届蓝桥杯C/C++A组第五题解答
2015-05-14 15:39
211 查看
题目:
1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
思路:
简要的看了题目后,我们 不难看出题目中给出的f是一个想要实现回溯功能的函数,test是一个判断结果的函数,那么,我们看看f内的细节,首先f包含两个参数,x[]和k,一个是负责把数组x传入,一个是记录现在进行到第几个数了,如果k>=9那么已经遍历结束,进行结果检测,然后返回,而那个for循环的作用就是把数从第k个进行良良交换来达到每个数都试到的目的,然后就是继续调用函数f,函数调用结束后要进行回溯归位,就把上面那一行的代码复制即可。
代码:
运行结果:
心路历程:
其实做这道题的时候,没有很用心,就是想到要回溯归位,尝试着把上面的代码复制一遍,然后居然出结果了,那个高兴啊,考完后,上贴吧,发现好多人都在说有关这道题复合语句的问题,就是复合语句中不要打“;”要打“,”,当时 心头一紧,我没考虑到复合语句,直接把上面的”t=x[k]; x[k]=x[i]; x[i]=t;“复制到下面来了,然后符号也没改,当时心里想着药丸药丸,这nm太考细节了吧,后来再仔细想想觉得也没什么,只要对了能出结果就行了,当然这也给我敲了一个警钟,不要忽视细节。
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; }
思路:
简要的看了题目后,我们 不难看出题目中给出的f是一个想要实现回溯功能的函数,test是一个判断结果的函数,那么,我们看看f内的细节,首先f包含两个参数,x[]和k,一个是负责把数组x传入,一个是记录现在进行到第几个数了,如果k>=9那么已经遍历结束,进行结果检测,然后返回,而那个for循环的作用就是把数从第k个进行良良交换来达到每个数都试到的目的,然后就是继续调用函数f,函数调用结束后要进行回溯归位,就把上面那一行的代码复制即可。
代码:
#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); {t=x[k], x[k]=x[i], x[i]=t;} } } int main() { int x[] = {1,2,3,4,5,6,7,8,9}; f(x,0); return 0; }
运行结果:
心路历程:
其实做这道题的时候,没有很用心,就是想到要回溯归位,尝试着把上面的代码复制一遍,然后居然出结果了,那个高兴啊,考完后,上贴吧,发现好多人都在说有关这道题复合语句的问题,就是复合语句中不要打“;”要打“,”,当时 心头一紧,我没考虑到复合语句,直接把上面的”t=x[k]; x[k]=x[i]; x[i]=t;“复制到下面来了,然后符号也没改,当时心里想着药丸药丸,这nm太考细节了吧,后来再仔细想想觉得也没什么,只要对了能出结果就行了,当然这也给我敲了一个警钟,不要忽视细节。
相关文章推荐
- 【DFS回溯】(2015)第六届蓝桥杯省赛 C/C++ A组 题解(第五题)
- 第六届蓝桥杯C/C++A组第八题解答
- 第六届蓝桥杯C/C++A组第四题解答
- 第六届蓝桥杯A组C/C++ 第五题 九数组分数
- 第六届蓝桥杯C/C++A组第一题解答
- 2015第六届蓝桥杯C++B组第五题:九数组分数
- 2015年4月第六届蓝桥杯c/c++B组省赛试题和个人解答
- 第六届蓝桥杯C/C++A组第三题解答
- 第六届蓝桥杯C/C++B组第八题 移动距离
- 2015第六届蓝桥杯C++B组第十题:生命之树
- 第六届 蓝桥杯 c/c++ B组 省赛 (7)——牌型种数
- 算法笔记_119:蓝桥杯第六届省赛(Java语言A组)试题解答
- 2015年第六届蓝桥杯试题(C/C++本科B组)1-8题
- 2015第六届蓝桥杯B组C/C++决赛题解【2.5.6待解><】
- 2015年第六届蓝桥杯本科B组C++省赛个人题解
- 第六届蓝桥杯A组C/C++ 第三题 奇妙的数字
- 第六届蓝桥杯C/C++第10题生命之树解题报告
- 2015年第六届蓝桥杯本科B组C++省赛个人题解
- 第六届 蓝桥杯 c/c++ B组 省赛 (1)——奖券数目
- 第六届蓝桥杯决赛 C语言B组 题解 第五题_居民集会