Bestcoder比赛再次爆0(应该是一直是0)
2015-08-01 23:00
211 查看
挺受打击的,哎.......
但是略有收获,遍历一个数组所有的组合,共有2^n-1种;
参考:/article/4999639.html
我改造之后的代码(遍历全部):
hdu1049(把队友的代码粘过来,参考一下吧):
慢慢来,加油!!!
但是略有收获,遍历一个数组所有的组合,共有2^n-1种;
参考:/article/4999639.html
我改造之后的代码(遍历全部):
#include <stdio.h> void combine_increase(int* arr, int start, int* result, int count, const int NUM, const int arr_len); void combine_decrease(int* arr, int start, int* result, int count, const int NUM); int main() { int arr[] = {1, 2, 3, 4, 5, 6}; int num; int result[7]; for(num=1;num<=6;num++){ combine_increase(arr, 0, result, num, num, sizeof(arr)/sizeof(int)); printf("分界线\n"); combine_decrease(arr, sizeof(arr)/sizeof(int), result, num, num); printf("--------------------------------------------------------\n"); } return 0; } //arr为原始数组 //start为遍历起始位置 //result保存结果,为一维数组 //count为result数组的索引值,起辅助作用 //NUM为要选取的元素个数 //arr_len为原始数组的长度,为定值 void combine_increase(int* arr, int start, int* result, int count, int NUM, int arr_len) { int i = 0; for (i = start; i < arr_len + 1 - count; i++) { result[count - 1] = i; if (count - 1 == 0) { int j; for (j = NUM - 1; j >= 0; j--) printf("%d\t",arr[result[j]]); printf("\n"); } else combine_increase(arr, i + 1, result, count - 1, NUM, arr_len); } } //arr为原始数组 //start为遍历起始位置 //result保存结果,为一维数组 //count为result数组的索引值,起辅助作用 //NUM为要选取的元素个数 void combine_decrease(int* arr, int start, int* result, int count, int NUM) { int i; for (i = start; i >=count; i--) { result[count - 1] = i - 1; if (count > 1) { combine_decrease(arr, i - 1, result, count - 1, NUM); } else { int j; for (j = NUM - 1; j >=0; j--) printf("%d\t",arr[result[j]]); printf("\n"); } } }今天就看了一道题,还没做出来,挺心塞的。
hdu1049(把队友的代码粘过来,参考一下吧):
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int b[30]; int n; bool cmp(int a,int b){ return a>b; } int Find(int k,int star); int main() { int T; scanf("%d",&T); while(T--){ int a; scanf("%d%d",&n,&a); int i,j; for(i = 0;i<n;i++) scanf("%d",&b[i]); sort(b,b+n,cmp); int cnt = 0; int term; int p = 0; for(i = 0;i<n;i++){ if(a>=b[i]){ if(p == 0){ term = a%b[i]; p++; } else{ term = term%b[i]; p++; } if(Find(term,i+1)||term == 0) break; } } if(i == n) printf("-1\n"); else if(term == 0) printf("1\n"); else printf("%d\n",p+1); } return 0; } int Find(int k,int star){ int i; for(i = star;i<n;i++) if(k == b[star]) return 1; return 0; }
慢慢来,加油!!!
相关文章推荐
- Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换
- glog
- Win10 svchost进程一直下载的解决方法
- Android Adapter优化问题
- TextBox限制只能输入字母或数字
- 第72讲:Scala界面事件处理编程实战详解
- phonegap-环境搭建(2)
- Angularjs_directive_Demo
- (4) 练习 - 文件下载(防盗链,支持单页面多下载)
- C# WinForm程序退出的方法
- Repo全解之自己搭建repo仓库
- 计蒜之道2015程序设计大赛初赛第一场——搜狗输入法的分词算法
- Dragon Balls
- 如何查看真机的沙盒(图文教程)
- Leetcode #33 Search in Rotated Sorted Array
- hdu 5327 Olympiad
- 排序后的数组删除重复数字
- 面向对象
- 将IIS6.0中的某页设置成首页
- 黑马程序员----java基础HashSet和TreeSet总结