一切解释尽在代码中!!!

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\n",ans);
 }
 return 0;
}