东方博宜oj答案1211-1220

写在前面

没想到拖更了这么这么这么久,五六月份比我想象的要忙碌的多的多...一边是经济有考试,一边C++还有机考,还要学高数和概率论,卷绩点实在是有亿点累。现在暑假也闲不下来,还有证要考,所以这一篇实际上是硬挤出来的,可能质量不好但是拖更太久我也有点不好意思。以10道题为一篇来更新体量确实是有点小了,然而50道题一篇我又有些吃不消,所以以后可能20题一更吧,感谢大家理解。代码在oj上是可以通过的但或许还会有不足之处,仅供参考,如果有发现问题请评论或私聊我,我看到了一定会回复的。

1211

#include <iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int a[15] = { 0 };
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	int loc;
	int num;
	cin >> loc >> num;
	for (int i = n + 1; i >= loc; i--)
	{
		a[i] = a[i - 1];
	}
	a[loc] = num;
	for (int i = 1; i <= n + 1; i++)
	{
		cout << a[i] << " ";
	}
	return 0;
}

1212

#include <iostream>
using namespace std;
int main()
{
	int a[100];
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	int min = 2147483647;//int所能存储的最大值
	int min_sub;
	int max = -2147483647;
	int max_sub;
	for (int i = 0; i < n; i++)//找出最小数的下标
	{
		if (a[i] < min)
		{
			min = a[i];
			min_sub = i;
		}
	}
	for (int i = 0; i < n; i++)//找出最大数的下标
	{
		if (a[i] > max)
		{
			max = a[i];
			max_sub = i;
		}
	}
	int temp = a[0];//交换
	a[0] = a[min_sub];
	a[min_sub] = temp;
	temp = a[n - 1];
	a[n - 1] = a[max_sub];
	a[max_sub] = temp;
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	return 0;
}

1213

#include <iostream>
using namespace std;
int main()
{
	int a[100];
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	int min = 2147483647;//int所能存储的最大值
	int min_sub;
	for (int i = 0; i < n; i++)//找出最小数的下标
	{
		if (a[i] < min)
		{
			min = a[i];
			min_sub = i;
		}
	}
	for (int i = 0; i < n; i++)
	{
		if (i != min_sub)
		{
			cout << a[i] << " ";
		}
	}
	return 0;
}

1214

#include <iostream>
using namespace std;
int main()
{
	int a[101];
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	int num;
	cin >> num;
	int max = -2147483647;//int所能存储的最小值
	int max_sub;
	for (int i = 0; i < n; i++)//找出最大数的下标
	{
		if (a[i] > max)
		{
			max = a[i];
			max_sub = i;
		}
	}
	for (int i = n-1; i > max_sub; i--)//最大数的后面所有数都往后移一位,给插入的数腾出空间
	{
		a[i + 1] = a[i];
	}
	a[max_sub + 1] = num;
	for (int i = 0; i < n + 1; i++)
	{
		cout << a[i] << " ";
	}
	return 0;
}

1215

稍微动动手画一下流程图就能搞定

#include <iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int a[200];
	int num = 0;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (a[i] > a[j])
			{
				num++;
			}
		}
	}
	cout << num;
}

1216

感谢@醅浮 提供的答案,感谢!

#include<iostream>
using namespace std;
int n;
int a[101][101];
int dp[101][101];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            cin>>a[i][j];
            dp[i][j]=a[i][j];
        }
    }
    for(int i=n-1;i>=1;i--)
    {
        for(int j=1;j<=i;j++)
        {
            dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j];
        }
    }
    cout<<dp[1][1];
}

1217

#include <iostream>
using namespace std;
int main()
{
	int n, num_xiaoming_front, num_xiaoming;
	cin >> n >> num_xiaoming_front >> num_xiaoming;
	int a[100];
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
		if (a[i] == num_xiaoming_front)
		{
			cout << num_xiaoming << " ";
		}
	}
}

1218

注意double,要不然求出来是整数。

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int a[100];
	int min = 2147483647;
	double sum = 0;
	double num = 0;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
		if (a[i] < min)
		{
			min = a[i];
		}
	}
	for (int i = 0; i < n; i++)
	{
		if (a[i] != min)
		{
			sum += a[i];
			num++;
		}
	}
	cout << fixed << setprecision(1) << sum / num;
}

1219

之前的题目有一大堆嵌套循环的,思路和那里类似。

#include <iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n / 2 + 1; i++)
	{
		for (int k = 0; k < i; k++)
		{
			cout << " ";
		}
		for (int j = 0; j < n; j++)
		{
			cout << "*";
		}
		cout << endl;
	}
	for (int i = n / 2; i > 0; i--)
	{
		for (int k = 0; k < i-1; k++)
		{
			cout << " ";
		}
		for (int j = 0; j < n; j++)
		{
			cout << "*";
		}
		cout << endl;
	}
}

1220

因为要求蛋挞数量尽量少,所以把蛋挞数放在外层循环,这样每次遍历一遍面包,如果有能把钱花完的话就直接结束掉,否则把蛋挞数加一然后继续跑面包循环。当有符合条件的时候直接return终止程序,用break只能跳出一层循环,不好使,可以试试如果把return换成break之后会有什么结果。

注意钱一定要花完!

#include <iostream>
using namespace std;
int main()
{
	int money, bread_price, tart_price;
	cin >> money >> bread_price >> tart_price;
	for (int i = 1; i <= money / tart_price; i++)
	{
		for (int j = 1; j <= money / bread_price; j++)
		{
			if (i * tart_price + j * bread_price == money)
			{
				cout << j << " " << i;
				return 0;
			}
		}
	}
}

### 关于东方OJ平台特定编号题目解答 对于东方OJ平台上编号处于2155至2500之间的题目求解,这类请求较为广泛,因为该区间内可能涵盖了多种不同类型的编程挑战,从基础逻辑运算到复杂的数据结构与算法应用都有所涉猎[^1]。 考虑到上述范围内的具体题目细节未知,在提供针对性解决方案前通常需要先了解每一题的具体要求。然而基于以往经验以及对在线评测系统的理解,可以给出一些通用建议来应对这一类别的问题: #### 使用动态规划处理具有依赖性的决策过程 当遇到像背包问题这样的经典案例时,推荐运用动态规划策略来进行优化求解。特别是针对内存有限制的情况,采用一维数组实现的状态转移方程能够有效减少空间开销的同时保持较高的时间性能[^2]。 ```cpp // 动态规划解决典型的一维背包问题示例代码 #include <iostream> using namespace std; const int maxn = 1e3 + 7; int dp[maxn], w[maxn], v[maxn]; void solve(int n, int m){ for (int i=1; i<=n; ++i) for (int j=m; j>=w[i]; --j) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } int main(){ // 输入物品数量n和最大重量m... } ``` #### 判断适用何种算法框架 面对某些特殊场景下的路径选择或资源分配等问题,应当评估是否存在最优子结构性质及其相互间的影响关系。如果发现当前状态的选择会影响到后续阶段的结果,则优先考虑动态规划而非贪心算法;反之则相反[^3]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

always-like-a-star

感谢支持,一定继续努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值