1、厂的代表说:厂的产品质量最次。厂的代表说:厂的产品不是最好的。厂的代表说:厂的产品会获得第一名。公布结果后,证明只有产品获第一名和第二名的两个厂的代表猜对了。 求个厂产品各获第几名。【答案】 if (e2) and (e3) and (a*b*c*d*e=120) thenif(ord(e=1)+ord(b=2)+ord(a=5)+ord(c1)+ ord(d=1)=2) and(ord(e=1) and (a=1) or (a=2)+ord(b=2) and (b=1) or (b=2)+ord(a=5) and (c=1) or (c=2)+ord(c1) and (d=1) or (d=
2、2)+ord(d=1) and (e=1) or (e=2)=2) then b: c: d: e:问题3逻辑判断v谁是小偷a问题av谁获冠军?a问题av猜测产品质量评奖a问题a问题【问题】有、四名偷窃嫌疑犯,其中一人是小偷,审问中,说:“我 不是小偷”,说:“是小偷”,说:“小偷肯定是”,说:“ 在冤枉人”,有三人说真话,一人说假话,问到底谁是小偷?var thief:char;for thief:=A to D doif ord(thief)+ord(thief=C)+ord(thief) and (zimu9 then write(chr(aj+55) 如果大于,用字母输出 else w
3、rite(aj);),n);readln;问题6进制2【题目】把n进制的数化回十进制表示如 (10101)2=(21)10var cf,s,i,j,n:string20;array1.20 of byte; 用字符串接收要转换的数=1 to length(m) do begin 把字符串换成数字,注意字母时的情况 if (mi0) then ai:=ord(mi)-48;if (upcase(mi)=ord(upcase(mi)-55;if ai=n then begin Error, Invaild m !halt;如果含有不在n进制内的字符,则判为出错。如进制的数,则不应 出现诸如1010
4、2,110031210等情况cf:=1; s:=alength(m); cf:乘方=length(m)-1 downto 1 do begin 从低位向高位,逐步转换 cf:=cf*n; s记录得出来的数 s:=s+ai*cf;(,m,n,s);问题7进制3【题目】任意进制间的互化。把n进制的转化成k进制表示如m=ff n=16 k=2则有 (ff)16=(11111111)2var s,n,k:procedure first(m:string;n:integer); 把数m化成十进制var cf,i,j:=1 to length(m) do begin) then ai:=n then be
5、gin writeln( end;=length(m)-1 downto 1 do begins:,s,)10procedure second(m,n:longint); 把十进制的数化成k进制 var i,j:9 then write(chr(aj+55)else write(aj);input m,n,k: m:数, n:原先进制, k:化成什么进制 readln(m,n,k);first(m,n); 把n进制的m化成十进制数second(s,k); 把化成k进制问题8钞票换硬币【题目】把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法?【答案】461种var i,j,k,t
6、otal:integer;total: 总数设为=1 to 99 do i:二分硬币最多99枚=1 to 49 do j:二分硬币最多49枚for k:=1 to 19 do k:五分硬币最多19枚if i*1+j*2+k*5=100 then writeln(i:3,j:3,k:3);inc(total); 总数加writeln(total);问题9百钱买百鸡【题目】一只公鸡值元,一只母鸡值元,只小鸡值元,现用一百元要买一百只鸡, 问有什么方案?【答案】四种方案:公鸡 母鸡 小鸡 问题10分书问题【题目】有、五本书,要分给张、王、刘、 赵、钱五位同学,每人只能选一本, 事先让每人把自 己喜爱
7、的书法填于右表,编程找出让每人都满意的方 案。 张 【答案】四种方案 王 张 王 刘 赵 钱 【参考程序】var z,w,l,zh,q,total: procedure output;zhang:,chr(z+64); writeln(wang:,chr(w+64);liu :,chr(l+64);zhao:,chr(zh+64);qian:,chr(q+64); writeln; inc(total);for z:=3 to 4 dofor w:if (w3) and (w4) then刘 赵 钱 for l:=2 to 3 dofor zh:=1 to 4 doif zh3 thenfor
8、 q:=2 to 5 doif (q3) and (q4) then beginif z+w+l+zh+q=15 thenif z*w*l*zh*q=120 then output;write(total);问题11筛选法【题目】统计楼梯级数。一步跨二级多一级,一步跨三级多二级,如果分别用四、五、六、 七去除级数分别余三、三、五、五。要求用筛选法求这个楼梯最少有多少级。【答案】级【参考程序】var a:array1.1000of boolean;array1.10 of integer;k,i,n,t:=2 to 1000 do ai:=true;=2;t:b1:b2:b3:=3;b4:b5:
9、=5;b6: 表示各种跨法的余数=2 to 1000 do 每一次筛选都从头到尾if ak=true thenif (k-bt)mod n7; 一共筛7次=2 to 1000 do if ai=true then begin write(i:5); halt;【参考程序】const max=1000;var i:array1.maxof 0.7; repeat =i+2;=ai+1;until imax; 一步跨二级 i: repeat =i+3; until i 三 i: repeat i:=i+4; 四 i:=i+5; 五 i:=i+6; 六 i:=i+7; 七 for i:=1 to m
10、ax do if (ai=6) then begin writeln(i); end. 跨了6次的梯级便为所求【参考程序】 程序是程序的精简,具有比程序更好的通用性。 const max=1000;array2.7 of byte =(1,2,3,3,5,5); 各种跨法剩余的级数 var i,j: 置初值=2 to 7 do begin 从2级到7级=bj;=i+j; 每一次可能跨到的级数 某级跨到一次,记录一次 从头跨到尾=1 to max doif (ai=6) then 跨了6次的梯级便为所求begin writeln(i); 找到第一个满足条件的便可结束程序 end.问题12求最大公
11、约数【题目】求两个正整数的最大公约数【算法】用辗转相除法 (参看40例3)var m,n,r,t:if (n=0) or (m=0) then begin writeln(error!if mn then begin t:=m;=n;=t; 大数放m,小数放n r:=m mod n; r:余数while r0 do begin=r;r:yu shu:问题13素数【问题】任给一个自然数n,求出这个自然数不同因数的个数。例如 n=6时,因为1,2,3,6这四个数均是的因数,故输出为total=。【算法】类似判断素数的方法。如果发现n有一个sqr()的因数,必然同时有一个sqr(n)的因数。 例如:
12、有一个因数,则必有另一因数。因为*36var n,nums,k,i:input n:readln(n);if n0!0;k:=trunc(sqrt(n);nums:=2 to k doif n mod i=0 then nums:=nums+2;if n=sqr(k) then dec(nums);,nums);问题14万年历【题目】输入年、月、日,求这一天是星期几。【算法提要】求出这一天离公元年的元旦有多少天days,然后对7求余 constfirst=1; 公元年为基准first_week=1; 公元年的元旦为星期一yue:array1.12 of 1.31=(31,28,31,30,31
13、,30,31,31,30,31,30,31);week_:array0.6 of string20 =(Sunday,MondayTuesdayWedsday, ThursdayFridaySaturdayvardays,week,year,month,date,i,years:year:readln(year);monthreadln(month);datereadln(date);years: days:=first to year-1 doif (i mod 400=0) or (i mod 4=0) and (i mod 1000) thenbegin years:=years+1;
14、注意处理闰年的情况days:=(year-first)*365+years; 离基准年过了多少天=1 to month-1 do days:=days+yuei; 本年过了多少个月=1 to date do days:=days+1; 本月过了多少天if (year mod 400=0) or (year mod 4=0) and (year mod 1003) then days: 如果本年为闰年,且月份超月, 还要考虑加week:=(days-1) mod 7 +first_week ) mod 7; 求星期数it is ,week_week);【参考程序】 用公式法:=trunc(yea
15、r-1)*(1+1/4-1/100+1/400)+c)用求出的days对求余数。其中c为该天离该年元旦的天数 constdays,week,year,month,date,i:0) and (month=trunc(year-1)*(1+1/4-1/100+1/400)+days);=days mod 7;问题15猴子选大王【问题】n只猴子选大王,选举办法如下:从头到尾,报数,凡报的退出, 余下的从尾到头,报数,凡报的退出如此类推,当剩下两 只猴子时,取这时报的为王,若想当猴王,请问当初应占据什么位置?【测试数据】n 7 1020100 位置2 816 77 const number=3;var n,num,i,total:array1.100of boolean; order:boolean; 队伍中剩下的猴子数=1 to n do ai:order: order=true:顺序报数num: num:报的数字for i
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1