全部评论
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;
}
是不是应该continue ,而不是break
最多颜色的气球减去2,第二多的减去1,直到三个数字的和小于三,或者减完之后又负得,结果40%....
#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;
}
}
long来存
这和直接加起来除3求整有什么区别呢?
1,1, 4?
break?
我只有10%
0.3飘过,唉
先从低到高排序,然后 int count=0;count=a[0];if(a[1]>=1&&a[2]>=2),count++;a[1]-1;a[2]-2;再排序,重复,直到a[1]==0。我觉得这样应该可以ac,但是中间那些重复的代码偷懒复制粘贴了几行代码,变量名字没改过来,直到结束都没发现问题。。
我也不知道为啥是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%。。。。。。更低了
我也试过了全部数减去最小数后,只剩下两个数嘛啊a[0],a[1] 然后不断重复以下过程 排序,a[0]-2,a[0]-1,累加次数 直到a[0]-2<=0或者a[0]-1<=0,但是这种超时了
#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; } 想的是先找三个元素最小的 让三个元素都减去最小的,再让最大的除以二和次大的比较,
难道?res+=Math.min(tem1,Math.min(tem2,(tem1+tem2)/3));
同40
如果较小的两个数的2被小于等于c就输出两个数的和否则输出3个数的和整除3 a了
360一共几道编程题,难度如何
相关推荐
投递快手等公司10个岗位 >
点赞 评论 收藏
分享