东方博宜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;
			}
		}
	}
}

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 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、付费专栏及课程。

余额充值