统计1~10000000之间只含有数字1和0的数的个数(如1,10,11,等)用pascal rep...统计1~10000000之间只含有数字1和0的数的个数(如11011,等)用pascal rep...

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/20 12:49:11
统计1~10000000之间只含有数字1和0的数的个数(如1,10,11,等)用pascal rep...统计1~10000000之间只含有数字1和0的数的个数(如11011,等)用pascal re

统计1~10000000之间只含有数字1和0的数的个数(如1,10,11,等)用pascal rep...统计1~10000000之间只含有数字1和0的数的个数(如11011,等)用pascal rep...
统计1~10000000之间只含有数字1和0的数的个数(如1,10,11,等)用pascal rep...
统计1~10000000之间只含有数字1和0的数的个数(如11011,等)用pascal rep...

统计1~10000000之间只含有数字1和0的数的个数(如1,10,11,等)用pascal rep...统计1~10000000之间只含有数字1和0的数的个数(如11011,等)用pascal rep...

这题用数学方法,笔算就行.

思路:把10000000看做二进制数,就是128,因此一共有128-1+1=128个


证明:

我们先把前几个只含有数字1和0的数列出来:

 1   10   11   100   101   110   111……

发现了吗?它们正好与前几个二进制数一一对应.因此就很好算了.


推广:

     如果题目是“统计1~10000000之间只含有数字0、1、2的数的个数”,只要将10000000当做三进制数就行了!


验证:

   我们用一个枚举算法来写程序.


var s:string;

    i,j,sum:longint;

    flag:boolean;


begin

 for i:=1 to 10000000 do

 begin

  flag:=true;

  str(i,s);

  for j:=1 to length(s) do

   if (s[j]<>'0') and (s[j]<>'1') then 

   begin 

    flag:=false;

    break;

   end;

  if flag then 

  begin

    inc(sum);

    writeln(s);

  end;

 end;

 writeln('sum=',sum);

 readln;

end.


自己运行一下吧.

结果如下(有一些显示不下)