PACAL大牛进若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数.例如:(13)10=(1101)2其中1的个数为3,0的个数为1
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/27 20:18:40
![PACAL大牛进若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数.例如:(13)10=(1101)2其中1的个数为3,0的个数为1](/uploads/image/z/12646120-40-0.jpg?t=PACAL%E5%A4%A7%E7%89%9B%E8%BF%9B%E8%8B%A5%E5%B0%86%E4%B8%80%E4%B8%AA%E6%AD%A3%E6%95%B4%E6%95%B0%E5%8C%96%E4%B8%BA%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%2C%E5%9C%A8%E6%AD%A4%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E4%B8%AD%2C%E6%88%91%E4%BB%AC%E5%B0%86%E6%95%B0%E5%AD%971%E7%9A%84%E4%B8%AA%E6%95%B0%E5%A4%9A%E4%BA%8E%E6%95%B0%E5%AD%970%E7%9A%84%E4%B8%AA%E6%95%B0%E7%9A%84%E8%BF%99%E7%B1%BB%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E7%A7%B0%E4%B8%BAA%E7%B1%BB%E6%95%B0%2C%E5%90%A6%E5%88%99%E5%B0%B1%E7%A7%B0%E5%85%B6%E4%B8%BAB%E7%B1%BB%E6%95%B0.%E4%BE%8B%E5%A6%82%EF%BC%9A%EF%BC%8813%EF%BC%8910%3D%EF%BC%881101%EF%BC%892%E5%85%B6%E4%B8%AD1%E7%9A%84%E4%B8%AA%E6%95%B0%E4%B8%BA3%2C0%E7%9A%84%E4%B8%AA%E6%95%B0%E4%B8%BA1)
PACAL大牛进若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数.例如:(13)10=(1101)2其中1的个数为3,0的个数为1
PACAL大牛进
若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数.
例如:(13)10=(1101)2
其中1的个数为3,0的个数为1,则称此数为A类数;
(10)10=(1010)2
其中1的个数为2,0的个数也为2,称此数为B类数;
(24)10=(11000)2
其中1的个数为2,0的个数为3,则称此数为B类数;
程序要求:求出1~1000之中(包括1与1000),全部A、B两类数的个数.
输入一个数,求出1到这个数之间的AB类数
输出一行输出两个数,空格隔开.
帮我看看哪儿错了,
program f003;
var
n,i,a,b:longint;
function pd(x:longint):boolean;
var
a:array [1..10000] of longint;
m,i,k,n0,n1:longint;
begin
for i:=1 to 20 do a[i]:=-1;
while x0 do begin
inc(k);
m:=x mod 2;
x:=x div 2;
a[k]:=m;
end;
for i:=1 to n do begin
if a[i]=0 then inc(n0);
if a[i]=1 then inc(n1);
end;
if n1>n0 then pd:=true else pd:=false;
end;
begin
readln(n);
for i:=1 to n do
if pd(i) then inc(a) else inc(b);
writeln(a,' ',b);
end.
PACAL大牛进若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数.例如:(13)10=(1101)2其中1的个数为3,0的个数为1
program Project1;
const max=1000;
var e:string; b:string;
m,a,n,i,q,w:integer; t,d:integer;
begin
assign(output,'output.txt');
rewrite(output);
t:=0; d:=0;
for n:=1 to max do
begin
m:=n; q:=0; w:=0;
e:=''; b:='';
repeat {此处转二进制 }
a:=m mod 2 ;
str(a,b);
e:=b+e;
m:=m div 2;
b:='';
until m=0;
for i:=1 to length(e) do {此处求二进制中1和0的个数 }
if e[i]='1' then q:=q+1
else w:=w+1;
if q>w then t:=t+1
else d:=d+1;
end;
writeln('A: ',t);
write('B: ',d);
close(output);
end.
自己写的已经通过,答案是:
A: 538
B: 462