1. TOM有一个无穷序列中如下:110100100010000100000。。。。。 请你帮助TOM找出在这个无穷序列中指定位置上的数字 输入格式 Input Format
第一行一个正整数N,表示询问的次数;
接下来的N行一个正整数Ai,Ai表示在序列中的位置。 输出格式 Output Format
N行,每一行为0或1,表示序列第Ai位上的数字。 对于100%的数据有N<=1500000,Ai<=10^9 var n,i:longint; x,z,y:int64;
begin readln(n);
for i:=1 to n do begin
readln(x); z:=(x-1)*2; y:=trunc(sqrt(z));
if z=y*(y+1) then writeln('1') else writeln('0'); end;
readln;readln; end. 输入 3 99 101 11
输出0 0 1 输入 5
7 1024 15 10000 4 输出 1 0 0 0 1
2. 输入一个正整数N(1 <= N <=20)后,可以得到一个N*N的数字螺旋方阵,分别求该方阵中的主对角线与副对角线上的数字之和S,P,输出S、P的差。 例如:N=5 得到的数字螺旋方阵如下:
1 2 3 4 5 其中:主对角线从左上角到右下角,得到 16 17 18 19 6 的数字之和为:S=1+17+25+21+9=73 15 24 25 20 7 副对角线从右上角到左下角,得到 14 23 22 21 8 的数字之和:P=5+19+25+23+13=85 13 12 11 10 9 S-P= - 12 Input 一个正整数N
Output主对角线与副对角线上的数字之和的差。 Sample Input 5 Sample Output -12
var n,i,j,t,f,l,q,z:integer;s1,s2:longint; a:array[1..20,1..20] of integer; begin
readln(n);
t:=1; f:=1; l:=n;i:=1;q:=1;z:=n; while t<=n*n do begin
case f of
1:begin
for j:=q to z do begin a[i,j]:=t;inc(t);end; f:=2; q:=i+1;dec(l); z:=l+q-1; end; 2:begin
for i:=q to z do begin a[i,j]:=t;inc(t);end; f:=3;q:=j-1; z:=q-l+1; end; 3:begin
for j:=q downto z do begin a[i,j]:=t;inc(t); end; f:=4;q:=i-1;dec(l);z:=q-l+1; end; 4:begin
for i:=q downto z do begin a[i,j]:=t;inc(t); end; f:=1;q:=j+1;z:=q+l-1; end; end; end;
s1:=0;s2:=0;
for i:=1 to n do s1:=s1+a[i,i];
for i:=n downto 1 do s2:=s2+a[n-i+1,i]; writeln(s1-s2);
end. 输入 7 输出 -24输入 20 输出 -200 输入 12 输出-72 15 输出 -112
3.字母A,B,C的所有可能的组合(按字典顺序排序)是: A, AB,ABC,AC,B,BC,C
每个组合都对应一个字典顺序的序号,如下所示: 1A 2AB 3ABC 4AC 5B 6BC 7C
找出某个字母组合的字典序号。例如,上例中AC的字典序号是4。 注:假设某个字母组合为X1X2X3…XK,保证X1 第一行:N,表示字母组合由字母表中前N(N<=26)个字母组成; 第二行:某一个字母组合,都是大写字母; 输出:该字母组合的序号; 输入样例: 3 AB 输出样例: 2 f[i]表示为i位的总方案数,每读一位就累加 var n,i,j,tot:longint; f:array[0..27] of longint; a:array[0..26] of char; c:char; begin fillchar(f,sizeof(f),0); readln(n); for i:=n downto 1 do begin for j:=i+1 to n do f[i]:=f[i]+f[j]; inc(f[i]); end; tot:=0; j:=0; a[0]:='@'; while not eoln do begin inc(j); read(a[j]); for i:=ord(a[j-1])-64+1 to ord(a[j])-64-1 do tot:=tot+f[i]; inc(tot); end; writeln(tot); end. 二进制数n mod m的结果是多少? 输入数据 第一行输入一个二进制数n。 第二行输入一个二进制数m。 输出数据 输出n mod m的结果。 输入样例 1010101010 111000 输出样例 1010 数据规模 n的长度(二进制数的位数)<=200 000; m的长度(二进制数的位数)<=20。 与10进制的高精同理,10进制每次乘10,2进制每次乘2. program fdfd; var a,ans:array[0..200000] of longint; b,i,r:longint; c:char; begin a[0]:=0; while not eoln do begin read(c); inc(a[0]); a[a[0]] :=ord(c)-48; end; readln; b:=0; while not eoln do begin read(c); b:=b*2+ord(c)-48; end; r:=0; for i:=1 to a[0] do r:=(r*2+a[i])mod b ; ans[0]:=0; repeat inc(ans[0]); ans[ans[0]]:=r mod 2; r:=r div 2; until r=0; for i:=ans[0] downto 1 do write(ans[i]); writeln; end. 输入 1110001111 1111100 输出 101011 输入 111111000000011111 111110001111 输出 110001011111 4. 镇里举办贪吃比赛,一共比赛N天,规定:每次吃的必须比上次多,一天只能吃一次(撑死...),吃的天数最多的人将获得胜利,获得10000000000 mod 10 的奖金^_^ 现在,Sally要参加比赛,她邀请参加OI的你一起帮忙,胜利后七三分成^_^ 输入格式 第一行一个数N,表示吃的天数(N<=10000) 第二行N个数,表示每天能吃的数量(数量最多10000) 输出格式 一个数,表示最多吃的天数 程序如下 program eat; var n,i,j,k,m:integer; a:array[0..10000] of integer; s:array[0..10001]of integer; begin readln(n); for i:=1 to n do read(a[i]); a[0]:=-100; for i:=1 to n do begin for j:=0 to i-1 do if (a[i]>a[j]) and (s[j]+1>s[i]) then s[i]:=s[j]+1; if s[i]>m then m:=s[i]; end; writeln(m); end. 输入 4 100 500 400 350 5. NSDFZ的同学们为了庆祝春节,准备排练一场舞会。 描述 Description 明显……交谊舞是2个人跳的,而且一男一女 -____-||||。 由于交谊舞之前的节目安排,所有的表演者都站成了一排。这一排人的顺序满足2点: ①对于一对舞伴男生站在女生的左边。 ②任何一对舞伴之间,要么没有人,要么就有若干对舞伴。 排得过于整齐导致那些要表演交谊舞的人都没办法看到自己的舞伴,怎么办类……. 所幸的是,SDFZ的女生比男生聪明得多。她们知道自己左边有几个男生。 现在就请你再告诉这些女生,她们的舞伴距离她们多远(即包括那个男生,一共有多少男生夹在他们之间)。 输入格式 Input Format 第一行为一个数n,表示参与跳交谊舞的女生个数。 第二行n个数,从左到右表示这n个女生左边分别有多少个男生。 输出格式 Output Format 一排n个数,行末无空格。表示n个女生与其舞伴的距离。 样例输入 6 4 5 6 6 6 6 样例输出 1 1 1 4 5 6 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库2014noip复赛模拟练习18(答案)在线全文阅读。
相关推荐: