第十届北京师范大学程序竞赛开始了,大牛51isoft准备采用两种传统的方法给比赛机房的各台机器编号,一种可以成为横”S”方式,另种可称为竖“S”方式(如下图所示)
输入包括多组数据,每组数据包含两行,第一行三个整数m,n,c,代表机房有m行n列机器(0<m,n<100),c代表机器将采用何种方式编号,1表示采用横“S”行,2表示竖“S”型,第二行先输入一个整数1或2代表51isoft将选择哪种方式告诉ch0588,若输入为1则再输入两个整数i,j表示ch0588将在第i行第j列的机器上比赛;若输入2,则再输入一个整数k,表示ch0588将在编号为k的机器上比赛;若输入0表示该组数据输入结束。当n=m=c=0时表示所有数据输入结束
对于大牛的每次选择,若51isoft选择第一种方式告诉ch0588,则输出该位置上机器的编号;若大牛选择第二种方式告诉ch0588(囧~~),则输出编号为k的机器位于机房的第几行第几列(输出的行和列用空格分开),如此ch0588就能很快的找到自己比赛的机器了!
5 5 1 1 1 1 2 7 0 0 0 0
1 2 4
#include <cstdio> #include<cmath> #include<cctype> #include<cstring> #define MAX 101 int m,n,c,i,j; int main() { //freopen("input.txt","r",stdin); while(scanf("%d%d%d",&m,&n,&c)) { if(!m&&!n&&!c)return 0; int choice; while(~scanf("%d",&choice)&&choice){ if(choice==1) { scanf("%d%d",&i,&j); if(c==1) { int k; if(i%2){k=(i-1)*n+j;} else { k=(i-1)*n+(n-j+1); } printf("%d\n",k); } if(c==2) { int k; if(j%2) { k=m*(j-1)+i; } else { k=m*(j-1)+(m-i+1); } printf("%d\n",k); } } if(choice==2) { int k; scanf("%d",&k); if(c==1) { if(k%n==0)i=k/n; else i=k/n+1; int q=k%n; if(i%2){j=q;if(q==0)j=n;} else {j=n-q+1;if(q==0)j=1;} printf("%d %d\n",i,j); } if(c==2) { if(k%m==0)j=k/m; else j=k/m+1; int q=k%m; if(j%2){i=q;if(q==0)i=m;} else {i=m-q+1;if(q==0)i=1;} printf("%d %d\n",i,j); } } } } return 0; }
原文:http://blog.csdn.net/acvcla/article/details/21331487