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

题目链接: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

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 using namespace std;
 6 
 7 int ans[10005];
 8 int main()
 9 {
10     int n,x,y,T;
11     scanf("%d",&T);
12     while(T--)
13     {
14         scanf("%d%d%d",&n,&x,&y);
15     //    if(n == 1 && y == 2)
16     //    {
17     //        printf("1\n");
18     //        continue;
19     //    }
20         ///一共分四种情况
21         if(x <= n && y == 1)     //要正确同时x小于等于n的情况
22         {
23             int f = 0;
24             for(int i = 1;i <= x-1;++i)
25             ans[++f] = i;
26             for(int i = x+1;f <= n;++i)
27             ans[++f] = i;
28             for(int i = 1;i <= n;++i)
29             printf(i == 1? "%d":" %d",ans[i]);
30             puts("");
31             continue;
32         }
33         for(int i = 1;i <= n-1;++i)
34         printf(i == 1? "%d":" %d",i);
35         if(n > 1) printf(" ");
36         if(y == 1)
37         printf("%d\n",n);
38         else
39         {
40             if(x <= n)
41             printf("%d\n",n);
42             else printf("%d\n",x);
43         }
44     }
45     return 0;
46 }
View Code

转载于:https://www.cnblogs.com/xiaxiaosheng/p/3857732.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值