WY54. 糖果谜题
描述
输入描述
假定部分小朋友的回答用空格间隔,如 1 1 3输出描述
直接打印最少有多少位小朋友拿到糖果示例1
输入:
1 1 3
输出:
6
示例2
输入:
0 0 0
输出:
3
说明:
三位小朋友都没发现有人和自己的颜色相同,所以最少的情况就是三位小朋友糖果的颜色均不同C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-08-01
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int* arr = malloc(sizeof(int) * 10000); memset(arr, 0, 10000); char *line = NULL; char space[2] = " "; size_t len = 0; getline(&line, &len, stdin); int count = 0; char* token; token = strtok(line, space); while (token != NULL) { int num = atoi(token); if (num == 0) { count++; } else if (arr[num] == 0) { arr[num] = num; count += num + 1; } else { arr[num]--; } token = strtok(NULL, space); } printf("%d", count); free(arr); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2020-09-20
int main() { int sum=0,num[1000],time,number,flag,n=0; do{ scanf("%d",&num[sum]); sum++; }while (getchar()!='\n'); for (int i=0;i<sum-1;i++) for (int j=i+1;j<sum;j++) { int k; if (num[i]>num[j]) { k=num[i]; num[i]=num[j]; num[j]=k; } } flag=1; for (int i=0;i<sum;i++) { if(flag==0) { if((time>0)&&(num[i]==number)) time--; else flag=1; } if(flag==1) { time=num[i]; number=num[i]; n=n+number+1; flag=0; } } printf("%d",n); return 0; }