范围问题 【简单】
问题 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\n",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 }