今晚360编程第二题,请教

题目如下:



图片说明

我的代码如下:只过了40%,请教下还有什么情况未考虑

#实习#
全部评论
AC代码 #include<iostream> #include<vector> #include<algorithm> #include<cmath> using namespace std; int main() {     int t;     cin>>t;     while(t--)     {         vector<long long >color;         long long  ans=0,temp;         for(int i=0;i<3;++i)         {             cin>>temp;             color.push_back(temp);         }         sort(color.begin(),color.end());         ans+=color[0];         ans+=min((color[1]+color[2]-2*color[0])/3,color[1]);         cout<<ans<<endl;     }     return 0; }
点赞 回复 分享
发布于 2018-04-01 10:43
是不是应该continue ,而不是break
点赞 回复 分享
发布于 2018-03-31 21:33
最多颜色的气球减去2,第二多的减去1,直到三个数字的和小于三,或者减完之后又负得,结果40%....
点赞 回复 分享
发布于 2018-03-31 22:30
#include<iostream> #include <algorithm> using namespace std; //贪心法,先安排最多的 int main() { int n; cin >> n; int zushu[n]; for (int i = 0; i < n; ++i) { int result = 0; int col[3]; cin >> col[0] >> col[1] >> col[2]; //从小到大排好顺序 sort(col, col + 3); while ((col[0] + col[1] + col[2]) >= 3 && col[1] != 0 && col[0] >= 0) { if (col[2] >= 2) { col[2] -= 2; col[1] -= 1; result += 1; sort(col, col + 3); continue; } if (col[0] == 1 && col[1] == 1 && col[2] == 1) { result += 1; col[0] = 0; col[1] = 0; col[2] = 0; } } zushu[i] = result; } for (int m = 0; m < n; ++m) { cout << zushu[m] << endl; } }
点赞 回复 分享
发布于 2018-04-01 00:52
long来存
点赞 回复 分享
发布于 2018-03-31 21:25
这和直接加起来除3求整有什么区别呢?
点赞 回复 分享
发布于 2018-03-31 21:26
1,1, 4?
点赞 回复 分享
发布于 2018-03-31 21:27
break?
点赞 回复 分享
发布于 2018-03-31 21:27
我只有10%
点赞 回复 分享
发布于 2018-03-31 21:28
0.3飘过,唉
点赞 回复 分享
发布于 2018-03-31 21:29
先从低到高排序,然后 int count=0;count=a[0];if(a[1]>=1&&a[2]>=2),count++;a[1]-1;a[2]-2;再排序,重复,直到a[1]==0。我觉得这样应该可以ac,但是中间那些重复的代码偷懒复制粘贴了几行代码,变量名字没改过来,直到结束都没发现问题。。
点赞 回复 分享
发布于 2018-03-31 21:40
我也不知道为啥是40,后来改了后变为10,然后我就不懂了 我的思路是这样的比如40,30,50, 先排序得到50,40,30,然后所有数减去最小的数得到20,10,0,并且sum=30 判断如果(a[0]+a[1])/3>=1,则{       sum=sum+s; } 通过率40%,然后我发现我条件不够严谨,我就改了下 如果(a[0]+a[1])/3>=1,则{         如果a[0]<=2*a[1],则sum=sum+s;         否则sum=sum+a[1]; } 结果通过率只有10%。。。。。。更低了
点赞 回复 分享
发布于 2018-03-31 21:48
我也试过了全部数减去最小数后,只剩下两个数嘛啊a[0],a[1] 然后不断重复以下过程     排序,a[0]-2,a[0]-1,累加次数 直到a[0]-2<=0或者a[0]-1<=0,但是这种超时了
点赞 回复 分享
发布于 2018-03-31 21:52
#include<stdio.h> #include<malloc.h> #define MAX_SIZE    100 void BubbleSort_high(int *array); int getcount(int r_count, int g_count, int b_count); int getcount(int r_count, int g_count, int b_count) {     int count = 0;          count += r_count;     r_count -= count;     g_count -= count;     b_count -= count;     if((b_count / 2) >= g_count) {         count += g_count;     }else {         count += (b_count / 2);     }     return count; } int main(void) {     int n;     int i,j;     int array[MAX_SIZE][3];     scanf("%d", &n);     for(i = 0; i < n; i++) {         scanf("%d%d%d", &array[i][0],&array[i][1],&array[i][2]);     } //先对得到的每组三个数据排序,第一步找到最小的min3Num  所有的元素减去最小的元素, count = count + min3Num //第二步最大的元素max除以2,和第二大的元素secondMax比较,若大于 count = count + secondMax //max/2 <= secondMax, 那么就让count = count + max / 2; //我还是不知道哪里有问题啊 心态炸了 好绝望啊 是我打扰贵公司了 打扰了     for(i = 0; i < n; i++) {         BubbleSort_high(array[i]);         printf("%d\n", getcount(array[i][0], array[i][1], array[i][2]));     }     return 0; } 想的是先找三个元素最小的 让三个元素都减去最小的,再让最大的除以二和次大的比较,
点赞 回复 分享
发布于 2018-03-31 21:56
难道?res+=Math.min(tem1,Math.min(tem2,(tem1+tem2)/3));
点赞 回复 分享
发布于 2018-03-31 22:01
同40
点赞 回复 分享
发布于 2018-03-31 23:02
如果较小的两个数的2被小于等于c就输出两个数的和否则输出3个数的和整除3 a了
点赞 回复 分享
发布于 2018-04-01 00:03
360一共几道编程题,难度如何
点赞 回复 分享
发布于 2018-04-01 08:44

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务