一切解释尽在代码中!!!
AC代码:
#include <cstdio> #include <iostream> using namespace std; int is(int x) { if(x%7==0) return 1; while(x)//判断一个数里面是否包含7 { if(x%10==7) return 1; x/=10; } return 0; } int main() { int n,m,k; while(scanf("%d %d %d",&n,&m,&k),(n||m||k)) { int ans=0,s=0,i=0,f=1;//f用来标记,s用来统计m号举手的次数, //ans用来统计m号恰好举手k次的数值,i是1-n之间左右移动的光标 while(s!=k) { if(f) i++;//从左往右报 else i--;//从右往左报 ans++; if(i==m&&is(ans)) s++;//报到了m就判断这个数是否符合规则 if(i==n) f=0;//从左往右报如果报到了n个人,则从n-1开始往左报 if(i==1) f=1;//从右往左报如果报到了第1个人,则从第2开始往右报 } printf("%d ",ans); } return 0; }