HNU 12833 Omar’s Bug(分情况讨论)

时间:2022-02-17 11:01:08

题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12833&courseid=268

解题报告:有个11个月大的程序员写了一个二分查找,想要实现的功能是输入一个数组,数组里面都是100以内的整数,然后输入一个x,如果这个数组中存在大于等于x的

数就输出这个数在数组中的位置,如果没有就输出数组的长度,但是这个代码有bug。现在给出数组长度n,x,还有一个y,y为1的时候让你出一组可以让这段代码得到正确答案的数据,y为2的时候让你出一组让这段代码可以得到错误结果的数据。

分四种情况讨论

1.x <= n && y == 1        ////输出    1,2,3.....(x-1)  (x+1)....n+1

2.x > n && y == 1          ////1,2,3,4......n

3.x <= n && y == 2       ////1,2,3,4.......n

4.x > n && y == 2        //////1,2,3,4 .......x

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std; int ans[];
int main()
{
int n,x,y,T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&x,&y);
// if(n == 1 && y == 2)
// {
// printf("1\n");
// continue;
// }
///////////////////一共分四种情况
if(x <= n && y == ) //要正确同时x小于等于n的情况
{
int f = ;
for(int i = ;i <= x-;++i)
ans[++f] = i;
for(int i = x+;f <= n;++i)
ans[++f] = i;
for(int i = ;i <= n;++i)
printf(i == ? "%d":" %d",ans[i]);
puts("");
continue;
}
for(int i = ;i <= n-;++i)
printf(i == ? "%d":" %d",i);
if(n > ) printf(" ");
if(y == )
printf("%d\n",n);
else
{
if(x <= n)
printf("%d\n",n);
else printf("%d\n",x);
}
}
return ;
}