标题:WA WA WA WA,无语了
只看楼主
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
结帖率:94.44%
已结贴  问题点数:20 回复次数:4 
WA WA WA WA,无语了
程序代码:
#include<stdio.h>
int compare(int a[],int i);
int main()
{
    int one,start,flag,num,big,small,ok,temp,time;
    int a[]={4,6,8,10,12,13,16,18,19,21,32};
    scanf("%d",&one);
    time=0;
    for(num=1;num<=100;num++)
    {
        big=100;small=1;flag=one;start=0;ok=0;
        do
        {
            flag++;
            if(!compare(a,flag))
            {
                temp=start+1;
            }
            else
                temp=(big-small)/3+start;
            if(temp>num)
                big=temp;
            else if(temp<num)
                small=temp;
            if((big-small==2)&&compare(a,flag+1)) break;
            start=small;
            if(temp==num)
            {
                ok=1;
                if(!compare(a,flag))
                {
                    time++;
                    if(num<10)
                    {
                        printf("%d   %d\n",num,flag);
                    }
                    else
                        printf("%d  %d\n",num,flag);
                    break;
                }
            }
            if(flag==33) flag=0;
        }while(ok==0);
        if(time==10) break;
    }
    return 0;
}

 
int compare(int a[],int i)
{
    int ok,j;
    for(j=0;j<11;j++)
    {
        if(i!=a[j])
            ok=1;
        else
        {
            ok=0;
            break;
        }
    }
    return ok;
}

题目是:“终极密码”的游戏,开始的start=0,规则是某一个同学从1~100中选一个号码,让后面的同学依次按学号顺序来猜(33号后面为1号)。例如1号同学选10,范围是(1~100);2号同学猜33,范围变成(33~100),start=33;女生的都是猜start+1,而男生是猜:范围/3+start,例如上述2号猜(100-1)/3+start=33。已知共有33个同学,学号4,6,8,10,12,13,16,18,19,21,32为女生。要求输入一个男生学号,输出让女生唱歌的数字及女生学号(最多输10项)。
题目很绕,他给的示例是输入15,这个测试数据我是对的,但是当我输入1的时候,笔算的结果和电脑算出来的不一样。
请问是什么原因。
搜索更多相关主题的帖子: start 
2011-12-11 10:58
jj19971130
Rank: 2
等 级:论坛游民
帖 子:35
专家分:69
注 册:2011-11-30
得分:14 
好多变量都代表什么呀,我没信心看了。
2011-12-11 12:52
jj19971130
Rank: 2
等 级:论坛游民
帖 子:35
专家分:69
注 册:2011-11-30
得分:0 
if(temp>num)
                big=temp;
            else if(temp<num)
                small=temp;
这里是在干什么?
没看懂,num不是控制循环的么,这里在干嘛?
2011-12-11 12:59
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
得分:0 
程序代码:
#include<stdio.h>
int compare(int a[],int i);
int main()
{
    int one,start,flag,num,big,small,ok,temp,time;
    int a[]={4,6,8,10,12,13,16,18,19,21,32};
    scanf("%d",&one);
    time=0;
    for(num=1;num<=100;num++)
    {
        big=100;small=0;flag=one;start=0;ok=0;
        do
        {
            flag++;
            if(flag==34) flag=0;
            if(!compare(a,flag))
            {
                temp=start+1;
            }
            else
            {
                if(big-small<3) temp=small+1;
                else temp=(big-small)/3+start;
            }
            if(temp>num)
                big=temp;
            else if(temp<num)
                small=temp;
            start=small;
            if(temp==num)
            {
                ok=1;
                if(!compare(a,flag))
                {
                    time++;
                    if(num<10)
                    {
                        printf("%d  %d\n",num,flag);
                    }
                    else
                        printf("%d %d\n",num,flag);
                    break;
                }
            }
        }while(ok==0);
        if(time==10) break;
    }
    return 0;
}

 
int compare(int a[],int i)
{
    int ok,j;
    for(j=0;j<11;j++)
    {
        if(i!=a[j])
            ok=1;
        else
        {
            ok=0;
            break;
        }
    }
    return ok;
}
这是新改的程序,题目是:军训的休息时间,小葱班级做了一个叫“终极密码”的游戏,开始的start=0,规则是某一个同学从1~100中选一个号码,让后面的同学依次按学号顺序来猜(33号后面为1号)。end=100,start=0,例如1号同学选20,范围是;2号同学猜 (100-0)/3=33,范围变成(0~33),3号男生猜(33-0)/3=11,这时start变为11,范围(11~33);……玩了一会后小葱发现,因为女生的胆子比较小,往往都是猜start+1,而男生是猜:范围/3+start,例如上述2号猜(100-1)/3+start=33。(如果范围小于3,男生也是加1 )已知小葱班里33个同学,学号是4,6,8,10,12,13,16,18,19,21,32为女生。要求输入一个男生学号,输出让女生唱歌的数字及女生学号(最多输10项)。
2011-12-12 12:51
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
得分:0 
回复 3楼 jj19971130
num是猜的数字,big,temp,small是用来控制缩小范围的
2011-12-12 12:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-357488-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020014 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved