欢迎使用CSDN-markdown编辑器
来源:互联网 发布:ios网络高级编程 pdf 编辑:程序博客网 时间:2024/05/13 02:27
2017年蓝桥杯模拟题 - 猜算式
题目是这样的![这里写图片描述](http://img.blog.csdn.net/20170316201115572?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlQYXRpZW56ZTIwMTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)这道题让我感到比较麻烦之处,是题中说到“0~9”每个数字都只出现了2次。后来想到了《啊哈!算法》介绍过的“桶排序”,很方便的解决了我这个问题。
桶排序简介
> **桶排序**的思想,对于一个需要排序的整型数组a,这个数组中值最大的一个元素,决定了桶的大小,每一个桶里面的值代表其下标(也就是数组a的某具体元素值)出现的次数(是不是可能会有很多很多空桶),然后再顺序输出桶的下标就可以了。例如 int a[3] = {1, 10000, 100}; 那么需要多少个桶来进行桶排序呢?那就是100001个(当然10000个也是可以的,只是希望看得更直观),所以“桶”应该这么定义:int t[100001] = {0}; 所以,t[1] = 1; t[100] = 1; t[10000] = 1; 其余都是空桶,数据大的时候就浪费空间严重,还可能存在其他缺点,但这道题我利用的只是桶排序的计数功能。 只要“0~9”当中的数字出现过,那么其出现的次数自增1.所以我的ch[10]这个数组就是桶啦~
代码块
时间比较紧急,想到这个方法才顿悟,以往会使用炒鸡多的条件判断,现在用这个方法,感觉到轻松很多!
#include <stdio.h>int main(){ int a, b, aa, bb, cc, aaa,i; int a1, a2, a3, b1, b2, b3, aa1,aa2,aa3, bb1,bb2,bb3, cc1,cc2,cc3, s1,s2,s3,s4,s5; int ch[10] = {0}; //每个元素的下标代表了0~9,对应的元素值则代表出现的次数。 for(a=100; a<1000; a++) { for(b=100; b<1000; b++) { a1 = a%10; ch[a1]++; a2 = a/10%10; ch[a2]++; a3 = a/100%10; ch[a3]++; b1 = b%10; ch[b1]++; b2 = b/10%10; ch[b2]++; b3 = b/100%10; ch[b3]++; aa = b1 * a; bb = b2 * a; cc = b3 * a; aaa = a * b; aa1 = aa%10; ch[aa1]++; aa2 = aa/10%10; ch[aa2]++; aa3 = aa/100%10; ch[aa3]++; bb1 = bb%10; ch[bb1]++; bb2 = bb/10%10; ch[bb2]++; bb3 = bb/100%10; ch[bb3]++; cc1 = cc%10; ch[cc1]++; cc2 = cc/10%10; ch[cc2]++; cc3 = cc/100%10; ch[cc3]++; s1 = aaa%10; ch[s1]++; s2 = aaa/10%10; ch[s2]++; s3 = aaa/100%10; ch[s3]++; s4 = aaa/1000%10; ch[s4]++; s5 = aaa/10000%10;ch[s5]++; for(i = 0; i<10; i++) { if(ch[i]!=2) break; if(i==9) printf("%d * %d\n" "--------\n" "%d\n%d\n%d\n" "--------\n = %d\n" ,a, b, aa, bb, cc, aaa); } for(i = 0; i<10; i++) { ch[i] = 0; } } } return 0; }
输出结果
> 我的程序运行后输出的答案会包含不正确的,只是因为我没有控制aa,bb, cc这三个数的数值范围,所以答案也只有第一个输出的情况是正确的。![这里写图片描述](http://img.blog.csdn.net/20170316200818446?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlQYXRpZW56ZTIwMTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- Unity优化相关总结(内存)
- 2017-3-16记第一次参加线上笔试
- C. Anton and Fairy Tale
- 测试方法
- unity调用Android中定义的方法
- 欢迎使用CSDN-markdown编辑器
- Android基础--首选项(SharedPreferences)
- 初学C#--2
- 欢迎使用CSDN-markdown编辑器
- JDBC调用mysql存储过程实现分页效果
- Android studio gradle跟更新方法
- i春秋 百度杯”CTF比赛(二月场) Misc&&web题解 By Assassin
- 给你的项目添加一个灵活的“开关”
- Centos7安装Redis集群