范围问题 【简单】

问题 B: 终极密码(¯﹃¯)

时间限制: 1 Sec  内存限制: 128 MB
提交: 376  解决: 151
[提交][状态][讨论版]

题目描述

军训的休息时间,小葱班级做了一个叫“终极密码”的游戏,开始的start=0,规则是某一个同学从1~100中选一个号码,让后面的同学依次按学号顺序来猜(33号后面为1号)。end=100,start=0,例如1号同学选了一个数20,让后面的同学猜。范围是(end-start);2号同学猜 (100-0)/3+start=33,范围变成(0~33),3号男生猜(33-0)/3+start=11,这时start变为11,范围(11~33);……玩了一会后小葱发现,因为女生的胆子比较小,往往都是猜start+1,而男生是猜:范围/3+start,例如上述2号猜(100-0)/3+start=33。(如果范围小于3,男生也是加1 )已知小葱班里33个同学,学号是4,6,8,10,12,13,16,18,19,21,32为女生。要求输入一个男生学号,输出让女生唱歌的数字及女生学号(最多输10项)。

输入

例如小葱的学号

15

输出

数字:1  女生学号:16

数字:2  女生学号:18

数字:3  女生学号:19

数字:4  女生学号:21

数字:14 女生学号:21

数字:35 女生学号:18

数字:36 女生学号:19

数字:37 女生学号:21

数字:58 女生学号:21

注意格式!!!

样例输入

15

样例输出

1   16
2   18
3   19
4   21
14 21
35 18
36 19
37 21
58 21
 
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int f(int a[],int ui);
 5     int n,s,e;//s - start e -end
 6     int flag,num,sex,temp,count;
 7     int a[]={4,6,8,10,12,13,16,18,19,21,32};
 8     while(scanf("%d",&n)!=EOF)
 9     {
10         count=0;
11         for(num=1;num<=100;num++)
12         {
13             s=0;e=100;
14             flag=n;sex=1;//sex 1为女性,2为男性
15             while(sex==1)
16             {
17                 flag++;
18                 if(flag>33)
19                     flag=1;
20                 if(f(a,flag)==0)//如果flag位是女生
21                     temp=s+1;
22                 else//否则为男生
23                 {
24                     if(e-s<3)
25                         temp=s+1;
26                     else
27                         temp=(e-s)/3+s;
28                 }
29                 if(temp>num)
30                     e=temp;
31                 else if(temp<num)
32                     s=temp;
33                 else if(temp==num)
34                 {
35                     sex=0;
36                     if(f(a,flag)==0)//如果flag位是女生,则判断输出,如果flag位是男生,则中断num++
37                     {
38                         count++;
39                         if(count<=10) 
40                             printf("%-3d%d
",num,flag);
41                         break;
42                     }
43                 }
44             }
45         }
46     }
47     return 0;
48 }
49 int f(int a[],int ui)
50 {
51     int sex,j;
52     for(j=0;j<=10;j++)
53     {
54         if(ui != a[j])
55             sex=1;
56         else 
57             return 0;
58     }
59     return sex;
60 }
原文地址:https://www.cnblogs.com/wushuaiyi/p/3485859.html