题目分析
一圈人说的就是一个循环抽象来说就是一圈循环要T了多少个成员,不妨把T掉的人变为0这样最后输出不为0的
即可
代码
#include<stdio.h> main() { int i,a[100],j,k=0;//定义人员数量 int quit=0;//退出人数 scanf("%d",&i);//参与人数 for(j=0;j<=i;j++)//给成员编号 { a[j]=j; } j=0; while(quit<i-1)//剩最后一个人时退出 { if(a[j]!=0)k++;//过滤退出的玩家,剩下的玩家喊口号 if(k==3){a[j]=0,quit++;k=0;}//当有玩家喊道3时退出 j++;//下一个人 if(j==i)j=0;//检测一圈是否结束 } for(j=0;j<i;j++)//筛选出在场的玩家 { if(a[j]!=0){printf("%d",a[j]);} } }
ps 这是基础运用和一些逻辑的混合 对于入门的人来说有点挑战 但是 没挑战也没啥意思。。。。。。。。。。。。。。
0.0分
0 人评分
#include<stdio.h> main() { int i,a[100],j,k=0; int quit=0; scanf("%d",&i); for(j=0;j<i;j++) { a[j]=j+1; } j=0; while(quit<i-1) { if(a[j]!=0)k++; if(k==3){a[j]=0,quit++;k=0;} j++; if(j==i)j=0; } for(j=0;j<i;j++) { if(a[j]!=0){printf("%d",a[j]);} } } 稍微修改了一下 这个才是对的
# include <iostream> using namespace std; int main() { int i, s = 0; int M, N; cout << "input the number M and N:" << endl; cin >> M >> N; for (i = 2; i <= M; i++) { s = (s + N) % i; } cout << "the number is:" << s + 1 << endl; }//某种恐怖的东西,楼主的方法,在不是数3个人而是很多时,时间可能超限
tianbowen 2017-12-26 15:07:45 |
请问一下s=(s+N)%i 这个逻辑是怎么想出来的?
laolin2333 2018-01-06 17:05:31 |
说实在,我至今不是很懂这关键一步,只知道这个是正确的,好像可以在数学上证明。
saitama 2018-12-10 21:35:15 |
一般方法只能这样一次次循环去掉了
写得挺好, 建议把赋值改成a[j] = j; 这样人数才正确,
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:1045 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:507 |
1025题解浏览:787 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:375 |
简单的a+b (C语言代码)浏览:488 |
班级人数 (C语言代码)浏览:972 |
剔除相关数 (C语言代码)浏览:1148 |
1074(纳闷了,答案错误,求指教)浏览:380 |
C二级辅导-公约公倍 (C语言代码)浏览:691 |
母牛的故事 (java语言代码)浏览:892 |