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
posted @ 2014-07-21 09:05  xiaxiaosheng  阅读(192)  评论(0编辑  收藏  举报