观看世界杯程序

观看世界杯

题目详情:

为了缓解同学们的学习压力,Tan老师决定组织大家去看一场世界杯的足球赛。由于那天别的班级也要去,所以每个班只分配了一列的座位,也就是说Tan老师的学生只能占指定的那一列中的座位。球赛马上要开始了,Tan老师看到自己班上的的学生并不是连续的坐着(因为有的同学不喜欢看,所以可能就坐在后面了),但为了使同学们表现的有纪律,要求大家尽可能向前排的空座位移动,这里Tan老师想到一个好的idea,那就是就此给同学们出一个题目,如果答对了那就改天再看一场,没答对就不看。

      Tan老师的题目是这样的:

就学生最开始占位的状态,要求同学们自己向最前面移动,但是要求一个同学一次移动最大的距离不能超过m,求同学们最少的移动次数达到上面所说的有纪律的状态。

输入描述:

             有多组测试数据,每组测试数据包含一个学生初始占位的状态字符串s(|s|<148)和m(0<m<=10),其中s中只含0或1(0表示空位,1表示该位置被占),并且s的右边是屏幕,m如上描述。

输出描述:

             对于每组测数据输出相应的答案。



答题说明:

输入样例:

001101 2

00111 1

输出样例:

1

0

我写的程序程序如下:

#include "stdio.h"
#include "string.h"
#define MAX 148
void main()
{
    char stu[MAX],*pstu;
    int m,len,count,precount;
    while(scanf("%s",stu) != EOF && scanf("%d",&m) != EOF)
    {
        len = strlen(stu);
        pstu = &stu[len - 1];
        count = 0;
        while(1)
        {
            precount = count;     
            pstu = &stu[len - 1];               //pstu指点数组最后一元素
            while(pstu != stu)
            {
                if(*pstu == '0')                //如果某位置没人坐
                {
                    if(*(pstu - m) == '1')      //如果没有坐的位置后面的m个人有人坐则将此人坐到前面去
                    {
                        *pstu = '1';
                        *(pstu - m) = '0';
                        count ++;                //移动资料加1
                    }
                }
                pstu --;                         //pstu指向前一个元素
            }

            if(precount == count)  m--;          //如果count没有增加,说明移动m个位置的情况不存在了,应移动m-1个位置

            pstu = &stu[len - 1];
            while(*pstu == '1' && pstu != stu) pstu--;          //判断是否移动完毕
            if(pstu == stu) break;
            
            while(*pstu == '0' && pstu != stu) pstu--;
            if(pstu == stu) break;
        }
        
            printf("%d",count);
    }
}

仅供大家参考学习,不保证完全正确

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值