CMB4. 年会抢玩偶游戏
描述
某公司年会上,组织人员安排了一个小游戏来调节气氛。游戏规则如下:
输入描述
输入为用空格分隔的3个正整数,依次为:参与游戏人数N、玩偶数M、小招所在位置K输出描述
输出为1个正整数,代表小招最多能够拥有的玩偶数。若没有,则输出0。示例1
输入:
1 1 0
输出:
0
示例2
输入:
1 3 1
输出:
3
C 解法, 执行用时: 2ms, 内存消耗: 244KB, 提交时间: 2019-05-13
#include<stdio.h> int main() { int n,m,k; scanf("%d%d%d",&n,&m,&k); if(k<1 || k>n || n==0 || m==0) printf("0\n"); else { // 参与游戏的人抢到的礼物不能比左右两边的人多两个或以上 // 即小招左右两边的人最少分别为小招的玩偶数减一,即max-1 // 为了让小招玩偶数尽量多,离校招越远的人玩偶数越少,呈依次减一的情形 for (int max = m; max >0; max--) { int sum = max; for (int i = 1; i <= k-1; i++) { sum += (max-i)>0?(max-i):0; } for (int i = 1; i <= n-k; i++) { sum += (max-i)>0?(max-i):0; } if(sum<=m) { printf("%d\n",max); break; } } } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2019-07-23
#include<stdio.h> int main() { int n,m,k,i; int sum,max; scanf("%d%d%d",&n,&m,&k); if(k<1 || k>n || n==0 || m==0) printf("0\n"); else { // 参与游戏的人抢到的礼物不能比左右两边的人多两个或以上 // 即小招左右两边的人最少分别为小招的玩偶数减一,即max-1 // 为了让小招玩偶数尽量多,离校招越远的人玩偶数越少,呈依次减一的情形 for (max = m; max >0; max--) { sum = max; for ( i = 1; i <= k-1; i++) { sum += (max-i)>0?(max-i):0; } for (i =1; i <= n-k; i++) { sum += (max-i)>0?(max-i):0; } if(sum<=m) { printf("%d\n",max); break; } } } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2020-12-23
#include<stdio.h> int main() { int n,m,k,i; int sum,max; scanf("%d%d%d",&n,&m,&k); if(k<1 || k>n || n==0 || m==0) printf("0\n"); else { // 参与游戏的人抢到的礼物不能比左右两边的人多两个或以上 // 即小招左右两边的人最少分别为小招的玩偶数减一,即max-1 // 为了让小招玩偶数尽量多,离校招越远的人玩偶数越少,呈依次减一的情形 for (max = m; max >0; max--) { sum = max; for ( i = 1; i <= k-1; i++) { sum += (max-i)>0?(max-i):0; } for (i =1; i <= n-k; i++) { sum += (max-i)>0?(max-i):0; } if(sum<=m) { printf("%d\n",max); break; } } } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-07-28
#include<stdio.h> int main() { int n,m,k; scanf("%d%d%d",&n,&m,&k); if(k<1 || k>n || n==0 || m==0) printf("0\n"); else { // 参与游戏的人抢到的礼物不能比左右两边的人多两个或以上 // 即小招左右两边的人最少分别为小招的玩偶数减一,即max-1 // 为了让小招玩偶数尽量多,离校招越远的人玩偶数越少,呈依次减一的情形 for (int max = m; max >0; max--) { int sum = max; for (int i = 1; i <= k-1; i++) { sum += (max-i)>0?(max-i):0; } for (int i = 1; i <= n-k; i++) { sum += (max-i)>0?(max-i):0; } if(sum<=m) { printf("%d\n",max); break; } } } return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-07-22
#include<stdio.h> int main() { int n,m,k; scanf("%d%d%d",&n,&m,&k); if(k<1 || k>n || n==0 || m==0) printf("0\n"); else { // 参与游戏的人抢到的礼物不能比左右两边的人多两个或以上 // 即小招左右两边的人最少分别为小招的玩偶数减一,即max-1 // 为了让小招玩偶数尽量多,离校招越远的人玩偶数越少,呈依次减一的情形 for (int max = m; max >0; max--) { int sum = max; for (int i = 1; i <= k-1; i++) { sum += (max-i)>0?(max-i):0; } for (int i = 1; i <= n-k; i++) { sum += (max-i)>0?(max-i):0; } if(sum<=m) { printf("%d\n",max); break; } } } return 0; }