寒假Day40:HDU1267-士兵训练问题-暴力
某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。 Input
本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。 Output
共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。 Sample Input 2 20 40 Sample Output 1 7 19 1 19 37
其实感觉从这一题上看,自己的代码能力还是很弱,
就类似于约瑟夫环问题,
一些问题没法很顺畅的从脑子里表达出来,
按理说类似这种题目应该很快敲出来,但是我没有。
好好反思这段时间的行为吧,
要对自己负责。
这一题还可以用队列写,但是我写了,但是答案不对,网上的我也没看懂。
AC代码:(暴力)
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<stack> #include<queue> using namespace std; bool book[5050]; int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); memset(book,0,sizeof(book)); int q=n,flag=0; while(q>3) { int p=0; for(int i=1; i<=n; i++) { if(book[i]==0) { p++; if((flag==0&&p%2==0)||(flag&&p%3==0)) { book[i]=1; q--; } } } if(flag) flag=0; else flag=1; } printf("1"); for(int i=2; i<=n; i++) { if(book[i]==0) printf(" %d",i); } printf("\n"); } return 0; }
分类:
暴力/贪心/水题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」