您的位置:首页 > 其它

Bestcoder比赛再次爆0(应该是一直是0)

2015-08-01 23:00 211 查看
挺受打击的,哎.......

但是略有收获,遍历一个数组所有的组合,共有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;

}


慢慢来,加油!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: