LCP 40. 心算挑战---C

「力扣挑战赛」心算项目的挑战比赛中,要求选手从 N 张卡牌中选出 cnt 张卡牌,若这 cnt 张卡牌数字总和为偶数,则选手成绩「有效」且得分为 cnt 张卡牌数字总和。
给定数组 cards 和 cnt,其中 cards[i] 表示第 i 张卡牌上的数字。 请帮参赛选手计算最大的有效得分。若不存在获取有效得分的卡牌方案,则返回 0。

示例 1:

输入:cards = [1,2,8,9], cnt = 3

输出:18

解释:选择数字为 1、8、9 的这三张卡牌,此时可获得最大的有效得分 1+8+9=18。

示例 2:

输入:cards = [3,3,1], cnt = 1

输出:0

解释:不存在获取有效得分的卡牌方案。

提示:

1 <= cnt <= cards.length <= 10^5
1 <= cards[i] <= 1000

思路:

1.输入卡牌数量以及每张卡牌的值; 
2.对卡牌从大到小排序
3.取出最大的cnt个牌并求和
4.如果我拿的牌中奇数牌有偶数个,则直接结束
5.讨论拿的是奇数张奇数牌:
1)剩下的没有牌,return 0;
2)拿的全是奇数,且剩下的也全是奇数 return 0;
3)丢偶拿奇数(最小的偶,最大的奇)(当剩下的牌存在奇数牌时成立)
4)丢奇拿偶数(最小的奇,最大的偶)(当剩下的牌存在偶数牌时成立)


代码: 


#include 
#include 
int main(int argc, char *argv[]) {
	/*输入一个含有N个元素的数组*/
	int i,j,t=0,n,*cards;
	cards=(int*)malloc(sizeof(int*)*n);
	printf("请输入卡牌张数N:") ;
	scanf("%d",&n) ;
	printf("请输入每张卡牌上的数字:\n") ;
	for(i=0;icards[i-1]){
				t=cards[i-1];
				cards[i-1]=cards[i];
				cards[i]=t;
			}
		} 
	} 
	
	
	int cnt,a=0,b=0,c=0,d=0,sum=0,p,q; 
	printf("请输入抽取的卡牌数:");//输入抽取的卡牌数cnt 
	scanf("%d",&cnt);
	for(i=0;i

你可能感兴趣的:(LeetCode,蓝桥杯,算法,职场和发展)