0907每日一练

某商店双11做活动,放出了N个特价商品,每个商品的价格为一个数字,排成一行,并制定了一条规则,相邻的特价商品只能买一个,请问,在满足这条购物规则的情况下,你购物的最大花销是多少钱

如:
输入: 4 11 13 3 1
输出: 18 (4+13+1)

答:
看到问题的时候,我首先想到的是,把这些商品价格放入一个数组,然后通过指针找到你想要的某一个值,然后把他们加到一起,再遍历整个数组,把多个求和出来的值,放入一个新的数组,对新的数组冒泡排序,最后输出的新数组的最后一个元素,就是所谓的最大花销。
在这里插入图片描述
光是这个双层循环的逻辑,就想了我好久,总是要注意规避指针指向超过数组范围越界的情况,而且注意到一个之前想当然的事儿就是“*p = arr[j+i]”,我原先写的是“*p = *(p+i)”,发现外层循环到第二次的时候,并不会用arr[2]的值作为起始值去计算,后来发现,上句只改变了指针指向的数,但是指针的地址还是在数组首元素那里,所以改成了直接对数组的操作。
包括前期为了考虑清楚什么时候跳出循环避免越界设的len,后来发现它和i的变化规律是一样的,而跳出循环的条件可以从求和规则上找,发现计算时的规律。
想明白这个求和,并正确输出之后,就开始把他们放到一个新数组arr1中进行冒泡排序,正好也对视频课的内容做个练习。
在这里插入图片描述
最后附上整个代码和效果图:

#include<iostream>

#define SIZE2 sizeof(arr) / sizeof(arr[0])
#define SIZE1 sizeof(arr) / sizeof(arr[0])/2
#define SIZE (sizeof(arr) / sizeof(arr[0])/2)+1
#define SIZE3 (sizeof(arr) / sizeof(arr[0])) - 1

using namespace std;


void test()
{
	int arr[] = {1,4,11,12,2,100,1000,10000};//4,11,13,3,1
	int arr1[SIZE] = { 0 };
	int *p = arr;
	int sum = 0;
	//int len = 0;

	for (int j = 0; j <= SIZE1;j++)//求和
	{
		sum = 0;
		for (int i = 0; i <= SIZE2;)
		{
			//cout << *p << endl;
			*p = arr[j + i];
			//cout << *p << endl;
			sum += *p;
			//cout << p << endl;
			//cout << *p << endl;
			//cout << sum << endl;
			//len + 2;
			i = i + 2;
			if ((j+i) > SIZE3)
				break;
		}
		//cout << sum << endl;
		arr1[j] = sum;                        //求得的和放入一个新数组
		//cout << arr1[j] << endl;
	}
	//冒泡排序
	for (int j = 0; j < SIZE-1; j++)
	{
		for (int i = 0; i < SIZE-1; i++)
		{
			if (arr1[i] > arr1[i + 1])
			{
				int temp = arr1[i];
				arr1[i] = arr1[i + 1];
				arr1[i + 1] = temp;
			}
		}
	}
	cout << "冒泡排序结果:" << endl;
	for (int i = 0; i < SIZE; i++)
	{
		cout << arr1[i] << "  ";
	}
	cout << "  " << endl;
	cout << "即最大花销:" << endl;
	cout << arr1[SIZE - 1] << endl;
}
int main()
{
	test();

	system("pause");
	return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
影分身是一种在忍者世界中常见的特殊技能,也是《火影忍者》中的一个重要元素。每个人都可以通过影分身术创造出许多个分身,这些分身可以同时进行各种活动。类比于影分身术,CSDN每日一练就像是一个模拟的技能训练场。每天CSDN都会发布一道题目供广大程序员参与练习。 参与影分身CSND每日一练的好处有许多。首先,通过每日一练,程序员们可以不断提高自己的编程能力。就像影分身可以通过快速反应和高效操作来增强自己的实力一样,参与每日一练可以锻炼程序员的编程思维和解决问题的能力。 其次,每日一练还可以丰富程序员的知识储备。每道题目都是经过精心挑选和设计的,涵盖了各种常见的编程知识点和技巧。通过解答这些问题,程序员们能够接触到各种新的问题和方法,扩展自己的知识领域。 另外,参与每日一练还可以增强程序员的交流与学习能力。在每道题目下方,CSDN提供了评论区供程序员们交流和讨论。程序员们可以在这里分享自己的解题思路和方法,互相学习和进步。这不仅能够提高解题能力,还能够拓宽视野,了解不同的编程思维和技术。 综上所述,影分身CSND每日一练就像是一个虚拟的技能训练场,可以帮助程序员们不断提升自己的编程能力,丰富知识储备,增强交流与学习能力。参与其中,每个程序员都能像影分身一样变得更加强大。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值