Problem L. Omar’s Bug【分类讨论】

在这里插入图片描述
在这里插入图片描述


题意

  • 有一个错误的二分查找代码,题目输入三个数: n , x , y n,x,y ,分别是:数组长度,查找元素,判断值。
  • 如果 y = 1 y=1 ,则输出能够使此二分查找正确的数组
  • 如果 y = 2 y=2 ,则输出使其出错的数组
  • 要求输出满足条件、且字典序最小的数组

题解

  • 题目不难,稍加分析即可发现,此二分查找算法中,区间形式为:左闭右开。对于相等元素,直接越过了。
  • 所以只要数组中有和带查找元素 x x 相等的值,就会出错;反之,没有和 x x 相等的元素,查找不会出错。
  • 注意输出字典序最小的。
  • x < = n   & &   y = 1 :   1.2.3.... ( x 1 ) . ( x + 1 ) . . . . ( n + 1 ) x<=n \ \&\&\ y=1:-- \ 1.2.3....(x-1).(x+1)....(n+1)
  • x > n   & &   y = 1     :   1.2.3.... n x>n \ \&\& \ y=1\ \ \ :\ --1.2.3....n
  • x < = n   & &   y = 2 :   1.2.3.... n x<=n\ \&\&\ y=2:\ --1.2.3....n
  • x > n   & &   y = 2     :   1.2.3.... ( n 1 ) . x x>n\ \&\&\ y=2\ \ \ :\ --1.2.3....(n-1).x

AC-Code

#include <bits/stdc++.h>
using namespace std;

int main() {
	int T;	cin >> T;
	while (T--) {
		int n, x, y;	cin >> n >> x >> y;
		if (x <= n && y == 1) {
			for (int i = 1; i <= x - 1; ++i)	cout << i << " ";
			for (int i = x + 1; i <= n; ++i)	cout << i << " ";
			cout << n + 1;
		}
		else if (x > n && y == 1) {
			for (int i = 1; i <= n - 1; ++i)	cout << i << " ";
			cout << n;
		}
		else if (x <= n && y == 2) {
			for (int i = 1; i <= n - 1; ++i)	cout << i << " ";
			cout << n;
		}
		else if (x > n && y == 2) {
			for (int i = 1; i <= n - 1; ++i)	cout << i << " ";
			cout << x;
		}
		cout << endl;
	}
	return 0;
}
发布了157 篇原创文章 · 获赞 99 · 访问量 9831

猜你喜欢

转载自blog.csdn.net/Q_1849805767/article/details/104152366