UVa 133 The Dole Queue(圈的下标处理)
来源:互联网 发布:java sftp 文件夹同步 编辑:程序博客网 时间:2024/05/22 01:40
本题难点在于用数组处理圈状物时下标的计算。
#include <cstdio>#include <string.h>using namespace std;const int maxn=25;int main(){ int n,k,m; while(scanf("%d%d%d",&n,&k,&m)==3&&n){ int people[maxn]; memset(people,0,sizeof(people)); int currA=0,currB=n+1,left=n; //用left记录剩下的人,作为循环终止的条件 while(left){ //利用下标模拟官员AB的运动 int i=k,j=m; while(i) {currA=(currA+1+n-1)%n+1;if(!people[currA])i--;} while(j){currB=(currB-1+n-1)%n+1;if(!people[currB])j--;} if(currA==currB){ people[currA]=1; left--; printf("%3d",currA); } else{ people[currA]=people[currB]=1; left-=2; printf("%3d%3d",currA,currB); } if(left) printf(","); //输出的处理,别怕“,” } printf("\n"); } return 0;}
注意点:
- 变量left的应用
相较于用left简洁明了,自己通过遍历整个数组来判断循环是否应该结束的方法麻烦冗长而且使“,”的打印不便。
bool End=false; …… for(int a=1;a<=n;a++){ if(!people[a]) break; if(a==n) End=true; }
启示:当循环与当且有效的元素个数(本题是还没有出队的人)有关时,可以设置一个计数变量。
2.“,”的打印
首先克服自己看到这样的输出:完整的一个输出需要分段输出,且中间不是换行而是空格、逗号等而且还要求不能多输出空格、逗号(如本题一次输出的最后不在需要逗号)时的恐惧感。
接下来是解决方案:
仔细分析“,”或者空格出现的条件,或者说是与输出正文的关系; 直接用语句printf(“,”);(怕啥,不就是一句话的事吗= =)
3.圈状循环数组的下标处理:
利用取余运算,关注头尾的处理。
然后本题中,对于currA、currB的处理,之前是这么写的:
while(i) {currA++; if(!people[(currA+1+n-1)%n+1])i--;}
currA++ 会使currA一直增加而不是循环。
0 0
- UVa 133 The Dole Queue(圈的下标处理)
- The Dole Queue(UVA 133)
- UVa 133 The Dole Queue
- Uva 133 The Dole Queue
- uva 133 - The Dole Queue
- uva-133 - The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 The Dole Queue
- UVa 133 - The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 - The Dole Queue
- uva-133 The Dole Queue
- UVA 133 The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 - The Dole Queue
- uva 133 The Dole Queue
- UVa 133 The Dole Queue
- uva 133 - The Dole Queue
- Java实例说明 一个汉字可以用char类型
- Android自定义控件热身——View的坐标位置和大小详解
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- 第五节 html文字列表
- Android 不能退出的解释(android.os.Process.killProcess(android.os.Process.myPid()))
- UVa 133 The Dole Queue(圈的下标处理)
- 常见的DOS命令行总结
- UNIX网络编程卷一 第一章 简介
- 怎样设计合适的接口
- hive拉链表和增量表
- Video4Linux框架简介(5) - 控制框架
- postgres拷贝指定数据
- 1st round, 200 number of isalnds
- Android开发自定义水印图片