uva133救济金发放The Dole Queue
2015-01-25 12:29
423 查看
背景:输出格式永远是程序员的痛啊,所以请一定注意输出格式。
学习:刚看了同学的博客,发现这道题会在小紫书的那个地方出现,是为了让我们练习自底向下的函数构建方式,所以请有兴趣读者自行将下面的代码改成自底向下的函数构建方式,不要像我一样一个main函数到底,因为程序小,一个main函数可以到底,但是当程序大的时候,只写一个main函数的话就过于麻烦。
思路:本题主要在这两个地方需要注意
学习:刚看了同学的博客,发现这道题会在小紫书的那个地方出现,是为了让我们练习自底向下的函数构建方式,所以请有兴趣读者自行将下面的代码改成自底向下的函数构建方式,不要像我一样一个main函数到底,因为程序小,一个main函数可以到底,但是当程序大的时候,只写一个main函数的话就过于麻烦。
思路:本题主要在这两个地方需要注意
for(int i=0;i<k;) { del1=(del1+1)%n; if(ok[del1]==1) i++; }
for(int j=0;j<m;) { if(del2==0) del2=n-1; else del2--; if(ok[del2]==1) j++; }一个是逆时针数,一个是顺时针数,逆时针数简单,直接加一再对n取余就好了,但是顺时针数的时候就不能一直直接减一了,因为当del2为0的时候,减一就不对了,在这个时候就直接把del2赋值为n-1就好了。然后还需要注意的一点就是del1和del2可能相等,在这个问题上就分开处理就好了。
if(del1==del2) { ok[del1]=0; sum+=1; printf("%3d",Queue[del1]); } else { ok[del1]=ok[del2]=0; sum+=2; printf("%3d%3d",Queue[del1],Queue[del2]); }下面附完整代码。
#include <stdio.h> int main(void) { int Queue[21]; int n,k,m; while(scanf("%d %d %d",&n,&k,&m)==3&&n&&k&&m) { int ok[21]; for(int i=0;i<n;i++) { Queue[i]=i+1; ok[i]=1; } int del1=-1,del2=n; for(int sum=0;sum<n;) { if(sum) printf(","); for(int i=0;i<k;) { del1=(del1+1)%n; if(ok[del1]==1) i++; } for(int j=0;j<m;) { if(del2==0) del2=n-1; else del2--; if(ok[del2]==1) j++; } if(del1==del2) { ok[del1]=0; sum+=1; printf("%3d",Queue[del1]); } else { ok[del1]=ok[del2]=0; sum+=2; printf("%3d%3d",Queue[del1],Queue[del2]); } } printf("\n"); } return 0; }
相关文章推荐
- 救济金发放(The Dole Queue, UVa 133)
- 例题 4-3 救济金发放(The Dole Queue) UVa 133
- 救济金发放 (The Dole Queue UVa 133)
- 算法竞赛入门经典(第2版)救济金发放(The Dole Queue,UVa133)
- 救济金发放The Dole QueueUVA 133
- UVa 133 The Dole Queue(救济金发放)
- UVa - 133 - The Dole Queue(救济金发放)
- [UVa 133]The Dole Queue 救济金发放
- 救济金发放 (The Dole QUEUE UVa 133)
- 救济金发放 (The Dole QUEUE UVa 133)
- 救济金发放(The Dole Queue, UVa 133)
- UVa OJ The Dole Queue 救济金发放 133
- 算法竞赛 例4-3救济金发放(The Dole Queue,UVa 133)
- UVa 133 - The Dole Queue
- UVa 133 - The Dole Queue
- UVA - 133 The Dole Queue 单纯模拟:1A
- 紫书章四例题3——UVA 133 TheDole Queue
- Uva 133 - The Dole Queue
- The Dole Queue——Uva_133
- UVa 133 - The Dole Queue