俩人轮流报数问题c语言实现
-
题目描述
-
题目分析
-
算法实现
题目描述:有甲.乙俩个人进行轮流报数,且只能报1到n之间的数,看谁先能报到m。为确保最后只能是甲先报到30,试着设计一种算法,来确定甲先报还是后报。
题目分析:如果m%(n+1)!=0,那么甲先报,那么让甲先报m%(n+1),然后以后每次乙报完数字i后,甲报(n+1-i),这样即可确保最后是甲先报到m。
如果m%2==0,那么甲后报,乙每次报的i值,甲报n-i+1,这样即可确保甲先报到m;
算法实现:
#include<stdio.h> int main(){ int n,m; scanf("%d %d",&n,&m); int sum=0; int c=m%(n+1);//判断取余是否为0; if(c!=0){ printf("先念"); sum+=c; printf("到 %d 到 %d",c,sum); int i=0; for(i=0;i<m/(n+1);i++){//不为0的先念 ; int v; scanf("%d",&v); sum+=n+1; printf("下一次念%d 到 %d\n",(n+1)-v,sum); }} else { printf("后 念");//为0的后念; int i; for(i=0;i<m/(n+1);i++){ int v; sum+=n+1; scanf("%d",&v); printf("念%d 到 %d\n",(n+1)-v,sum);} } }