SDUSTOJ 1191 - 剪子包袱锤游戏 ( 结构体 函数的巧妙应用 )
2018-01-06 16:44
316 查看
Description
Tom、Jack和Mary三人在同一个小学上学,又住在同一个小区。所以每天上学、放学的路上,他们都玩一些小游戏。某天,三人玩剪子包袱锤(Scissors-Paper-Rock)。每人随机出一种,然后决定胜出者和失败者。
现在,请你编程,判断每次游戏的结果。
Input
输入为多行。第一行 含有2个数字M和N,其中0 < M < 100,表示总共进行了M次游戏。0 < N <= 10表示有N个人同时进行游戏。
第二行是N个人的名字,两两之间用空格隔开。
之后的M行,是M次游戏时每个人出的拳种(Scissors、Paper或Rock),每行含有N个输入,两两之间用空格隔开。
Output
输出有M行,每行输出与上述每行输入一一对应。输出分为3种情况:
1. 如果N个人无法决出胜负,且不是平局,则输出:No winner, no loser.
2. 如果N个人所出相同,则为平局,输出:Tie.
3. 如果一部分人胜出,则输出:winner1, winner2,… win loser1, loser2,…
其中,winner1,winner2与loser1,loser2等是对应人的姓名,输出顺序与输入的第2行中的姓名顺序相同。具体格式见样例。
Sample Input
3 3
Tom Jack Mary
Rock Rock Rock
Rock Paper Scissors
Rock Scissors Scissors
Sample Output
Tie.
No winner, no loser.
Tom win Jack,Mary.
Tom、Jack和Mary三人在同一个小学上学,又住在同一个小区。所以每天上学、放学的路上,他们都玩一些小游戏。某天,三人玩剪子包袱锤(Scissors-Paper-Rock)。每人随机出一种,然后决定胜出者和失败者。
现在,请你编程,判断每次游戏的结果。
Input
输入为多行。第一行 含有2个数字M和N,其中0 < M < 100,表示总共进行了M次游戏。0 < N <= 10表示有N个人同时进行游戏。
第二行是N个人的名字,两两之间用空格隔开。
之后的M行,是M次游戏时每个人出的拳种(Scissors、Paper或Rock),每行含有N个输入,两两之间用空格隔开。
Output
输出有M行,每行输出与上述每行输入一一对应。输出分为3种情况:
1. 如果N个人无法决出胜负,且不是平局,则输出:No winner, no loser.
2. 如果N个人所出相同,则为平局,输出:Tie.
3. 如果一部分人胜出,则输出:winner1, winner2,… win loser1, loser2,…
其中,winner1,winner2与loser1,loser2等是对应人的姓名,输出顺序与输入的第2行中的姓名顺序相同。具体格式见样例。
Sample Input
3 3
Tom Jack Mary
Rock Rock Rock
Rock Paper Scissors
Rock Scissors Scissors
Sample Output
Tie.
No winner, no loser.
Tom win Jack,Mary.
思路
比较简单的题目 , 代码过程中巧妙地运用函数极大地精简了代码量AC代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #define maxn 15 struct game { char n[100]; //记录名字 char q[10]; //拳种 }; struct game p[maxn]; int tiejudge( int a, int b, int c ) { if( a != 0 && b == 0 && c == 0 ) return 1; return 0; } void put_results( struct game *p, char win, char fal, int b ) { int times = 0; for( int i = 0; i < b; i++ ){ if( p[i].q[0] == win ){ if( times ) printf(","); printf("%s",p[i].n); times++; } } printf(" win "); times = 0; for( int i = 0; i < b; i++ ){ if( p[i].q[0] == fal ){ if( times ) printf(","); printf("%s",p[i].n); times++; } } puts("."); } int main() { int a,b; scanf("%d%d",&a,&b); for( int i = 0; i < b; i++ ) scanf("%s",p[i].n); while(a--){ int jd = 0, st = 0, bu = 0; for( int i = 0; i < b; i++ ){ scanf("%s",p[i].q); switch( p[i].q[0] ){ case 'S' : jd++; break; case 'R' : st++; break; case 'P' : bu++; break; } } if( jd != 0 && st != 0 && bu != 0 ) puts("No winner, no loser."); else if( tiejudge(jd,st,bu) || tiejudge(st,bu,jd) || tiejudge(bu,jd,st) ) puts("Tie."); else { if( jd == 0 ) put_results( p, 'P', 'R', b ); else if( st == 0 ) put_results( p, 'S', 'P', b ); else if( bu == 0 ) put_results( p, 'R', 'S', b ); } } return 0; }
相关文章推荐
- 结构体对函数指针的高级封装应用
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 游戏中关于跳跃的函数图像的推导以及应用
- 多个结构体的函数应用
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 结构体与函数指针的特殊应用
- 把结构体数组应用在vc的函数中当形式参数遇到的问题
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 指针的引用——在函数中的巧妙应用
- C语言学习10:结构体,结构体应用,联合用法,枚举,fopen函数使用,fseek,ftell的作用和文件结束符EOF,数组和文件交换数据,个人信息管理。
- 函数 指针 结构体的综合应用
- C语言中结构体在函数中的应用
- 嵌入式C语言中printf函数的使用(二)——SWO引脚的巧妙应用
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析 .
- 简单的足球游戏——for循环的应用,输入输出函数的区别
- 关于 结构体 函数的应用
- srand ()与rand()函数小应用之猜数游戏
- C语言结构体及typedef关键字定义结构体别名和函数指针的应用
- C语言中结构体在函数中的应用 .