Fortune Telling

文章介绍了如何利用冒泡排序算法计算给定一组数的最大奇数和,包括代码实现和注意事项。算法时间复杂度为O(n^2)。
摘要由CSDN通过智能技术生成

Fortune Telling

题目链接

题意

给出一组数并计算这组数的最大奇数和

思路

将一组数输入,计算总和
对数进行冒泡排序
判断总和是否是奇数,不是就减去最小的奇数

坑点

要求一组数中的最大奇数和,而不是两个数的最大奇数和
偶数-奇数=奇数

算法一:冒泡排序

时间复杂度

O(n2)

实现步骤
  1. x
  2. x
  3. x
代码
 
 

算法二:XX+XX

时间复杂度

$

实现步骤

首先,定义变量n、jishu、sum,分别表示输入的数字个数、奇数值、总和。
使用cin读取n的值。
定义数组a,大小为n+5,用于存储输入的数字。
使用for循环读取n个数字,并将其累加到sum中。
使用双重循环(冒泡排序)对数组a进行排序,使得数组中的数字按照非递减顺序排列。
使用for循环遍历数组a,找到第一个奇数值,并将其赋值给jishu。
判断sum的奇偶性,如果sum是偶数,则进行进一步判断。
如果jishu不为0,则将jishu从sum中减去。
如果jishu为0,则输出jishu并返回。
输出sum的值。

代码
 #include <iostream>
using namespace std;

int main() {
	int n,jishu=0; 
	int sum=0;
	cin>>n;
	int a[n+5];
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
		sum+=a[i];
	}
	for(int i=0;i<n;i++){
		for(int j=n-1;j>=i;j--){
			if(a[i]>=a[j]){
				int temp=a[j];
				a[j]=a[i];
				a[i]=temp;
			}
		}
	}
	for(int i=0;i<n;i++){
		if(a[i]%2!=0){
			jishu=a[i];
			break;
		}
	}
	if(sum%2==0) {
		if(jishu!=0){
			sum-=jishu;	
		}
		else{
			cout<<jishu;
			return 0;
		}
	}
	cout<<sum;
    return 0;
}

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值