回 帖 发 新 帖 刷新版面

主题:郁闷,调试了两小时还找不错

三 报数: ( 30分 )
10个小朋友围坐成一圈玩报数游戏(如图),报数规则如下:从编号为1的小朋友开始报起,他先报"1",下面编号为2的小朋友报"2",依次往下报,10号报完后再回到1号,1号接着10号所报的数继续往下报,但任何人报的数不能是7的倍数,所报的数中也不能含数字"7"。
如:7,14,17,21,27,28,...,70,71,72,...,都是不能报的数。        9      3  
下例为前三圈每位小朋友报的数:
小朋友编号 1  2  3  4  5  6  7  8  9  10         
第1圈  1   2   3   4   5   6   8   9  10  11
第2圈  12  13  15  16  18  19  20  22  23  24
第3圈     25  26  29  30  31  32  33  34  36  38
    编程求编号I (1=1,2.....10) 的小朋友第J (J<1000)圈所报的数是几? I和J均由键盘输入。
    例如     输入:  I=3   J=2     输出: 15  


我写的程序,但不知为什么调试I=3  J=3时开始出错,水平太差不要见笑!!!
var
   a,b,i,j,s,f:integer;

procedure pd(x:integer);
var
   q:integer;

begin
     while x>0 do
           begin
                q:=x mod 10;
                if q=7 then begin f:=1; s:=s+f;exit; end else f:=0;
                x:=x div 10;
           end;
end;


begin
     readln(i); readln(j);

     for a:=1 to j do
         for b:=1 to 10 do
            begin
                  s:=s+1;
                  if s mod 7=0  then s:=s+1 else pd(s);
                 if (j=a) and (b=i) then begin writeln(s);halt; end;
             end;
     readln;
end.
[em8][em8][em8]

回复列表 (共2个回复)

沙发

这是我编的,模拟了过程.
program baoshu;
var a:array[1..10]of integer;
    i,j,k,t,x:integer;
function ok(l:integer):boolean;
begin
  ok:=false;
  if l mod 7 <>0 then
  begin
    while l>0 do
    begin
      if l mod 10 <>7 then l:=l div 10
      else break;
    end;
    if l=0 then ok:=true;
  end;
end;
begin
  readln(i);
  readln(j);
  fillchar(a,sizeof(a),0);
  x:=1;t:=0;k:=0;
  while x<=j do
  begin
    t:=t+1;
    if ok(t) then
    begin
      if k=10 then x:=x+1;
      k:=(k+1) mod 11;
      if k=0 then k:=1;
      a[k]:=t;
    end;
  end;
  writeln(a[i]);
end.

板凳

我也来一个程序,不知对否?但以后请要别人看的程序一定要写注释,这样别人才会看的懂,也才会有信心去看!谢谢!

program baoshu(input,output);
{思想是用高中时学的排序的方法}
  var
    i,j,n,m:integer;
  begin
    read(i,j);
    n:=10*j+i;{先求去数过了多少个数}
    if n mod 6<>0 then m:=n+n div 6
      else m:=n+n div 6-1;
    { 再算出真实数到的数,n div 6 就是没有数过的几个数,
      但是比喻数了12个数照上面算来就应加2但是实际只有一
      个没有数过所以有else部分}
    write(m)
  end.


其实这道题并不要那么复杂,只要你看去其中的规律然后转换一下自己的思维就很容易了,所以凡事不要太执着,虽然执着很好,但是有时太执着反而会使自己陷入泥潭越来越深。

我来回复

您尚未登录,请登录后再回复。点此登录或注册