广州六中编程习题集文档格式.docx
- 文档编号:7705889
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:45
- 大小:33.86KB
广州六中编程习题集文档格式.docx
《广州六中编程习题集文档格式.docx》由会员分享,可在线阅读,更多相关《广州六中编程习题集文档格式.docx(45页珍藏版)》请在冰点文库上搜索。
【问题】5家工厂的产品在一次评比中分获1,2,3,4,5,在公布结果前,已知E
厂产品肯定不是第二、三名,五厂代表猜测评比结果,
A厂的代表说:
E厂一定能获得第一名。
B厂的代表说:
我厂的产品可能获第二名。
C厂的代表说:
A厂的产品质量最次。
D厂的代表说:
C厂的产品不是最好的。
E厂的代表说:
D厂的产品会获得第一名。
公布结果后,证明只有产品获第一名和第二名的两个厂的代表猜对了。
求5个厂产品各获第几名。
【答案】ABCDE
52134
if(e<
>
2)and(e<
3)and(a*b*c*d*e=120)then
if(ord(e=1)+ord(b=2)+ord(a=5)+
ord(c<
1)+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((c<
1)and((d=1)or(d=2)))+
ord((d=1)and((e=1)or(e=2)))
=2)then
b:
c:
d:
.context问题3
【问题】有A、B、C、D四名偷窃嫌疑犯,其中一人是小偷,审问中,A说:
“我
不是小偷”,B说:
“C是小偷”,C说:
“小偷肯定是D”,D说:
“C
在冤枉人”,有三人说真话,一人说假话,问到底谁是小偷?
varthief:
char;
forthief:
='
A'
to'
D'
do
iford(thief<
)+ord(thief='
C'
)+
ord(thief<
)=3thenwriteln('
TheThiefis:
'
thief);
.context字母塔
【问题】输出由字母组成的“字母塔”。
例如:
输入C,则输出:
A
ABA
ABCBA
ABCDCBA
vari,zimu,j,k:
repeat
inputachar:
);
readln(zimu);
zimu:
=upcase(zimu);
until(zimu>
)and(zimu<
Z'
fori:
tozimudobegin
write('
:
(ord(zimu)-ord(i))+1);
{留空格}
forj:
toidowrite(j);
{顺序写字母}
=pred(i)downto'
dowrite(j);
{逆序写字母}
if(ord(i)-64)mod25=0thenreadln{如超一页,要暂停分页显示}
elsewriteln;
.context进制1
【题目】键盘输入一个十进制的整数,及确定进制n,把这个数转换成相应的n进制输出。
(其中2〈=n〈=16)
例如:
输入10,n=3则输出(10)10=(101)3
vari,j,m,n:
longint;
a:
array[1..100]ofbyte;
{用数组存放求出的余数}
inputm,n'
fillchar(a,sizeof(a),0);
readln(m,n);
write(m);
i:
=0;
=i+1;
a[i]:
=mmodn;
m:
=mdivn;
untilm=0;
=('
=idownto1do
ifa[j]>
9thenwrite(chr(a[j]+55)){如果大于9,用字母输出}
elsewrite(a[j]);
)'
n);
readln;
.context进制2
【题目】把n进制的数化回十进制表示
如(10101)2=(21)10
varcf,s,i,j,n:
string[20];
array[1..20]ofbyte;
{用字符串接收要转换的数}
=1tolength(m)dobegin{把字符串换成数字,注意字母时的情况}
if(m[i]<
9'
)and(m[i]>
0'
)thena[i]:
=ord(m[i])-48;
if(upcase(m[i])<
F'
)and(upcase(m[i])>
)then
=ord(upcase(m[i]))-55;
ifa[i]>
=nthenbeginwriteln('
Error,Invaildm!
halt;
end;
{如果含有不在n进制内的字符,则判为出错。
如2进制的数,则不应
出现诸如10102,110031210等情况}
cf:
=1;
s:
=a[length(m)];
{cf:
乘方}
=length(m)-1downto1dobegin{从低位向高位,逐步转换}
=cf*n;
{s记录得出来的数}
=s+a[i]*cf;
('
m,'
n,'
s);
readln;
.context进制3
【题目】任意进制间的互化。
把n进制的M转化成k进制表示
如m=ffn=16k=2
则有(ff)16=(11111111)2
vars,n,k:
m:
procedurefirst(m:
string;
n:
integer);
{把数m化成十进制}
varcf,i,j:
=1tolength(m)dobegin
=length(m)-1downto1dobegin
write('
s,'
)10'
proceduresecond(m,n:
longint);
{把十进制的数化成k进制}
vari,j:
9thenwrite(chr(a[j]+55))
inputm,n,k:
{m:
数,n:
原先进制,k:
化成什么进制}
readln(m,n,k);
first(m,n);
{把n进制的m化成十进制数S}
second(s,k);
{把S化成k进制}
.context钞票换硬币
【题目】把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法?
【答案】461种
vari,j,k,total:
integer;
total:
{总数设为0}
=1to99do{i:
二分硬币最多99枚}
=1to49do{j:
二分硬币最多49枚}
fork:
=1to19do{k:
五分硬币最多19枚}
ifi*1+j*2+k*5=100thenbegin
writeln(i:
3,j:
3,k:
3);
inc(total);
{总数加1}
writeln(total);
.context分书问题
【题目】有A、B、C、D、E五本书,要分给张、王、刘、赵、钱五位同学,每人只能选一本,事先让每人把自己喜爱的书法填于右表,编程找出让每人都满意的方案。
【答案】四种方案
张王刘赵钱
①CABDE
②DACBE
③DBCAE
④DECAB
【参考程序】
varz,w,l,zh,q,total:
procedureoutput;
zhang:
chr(z+64));
wang:
chr(w+64));
liu:
chr(l+64));
zhao:
chr(zh+64));
qian:
chr(q+64));
writeln;
forz:
=3to4do
forw:
if(w<
3)and(w<
4)then
forl:
=2to3do
forzh:
=1to4do
ifzh<
3then
forq:
=2to5do
if(q<
3)and(q<
4)thenbegin
ifz+w+l+zh+q=15then
ifz*w*l*zh*q=120thenoutput;
write(total);
.context筛选法
【题目】统计楼梯级数。
一步跨二级多一级,一步跨三级多二级,如果分别用四、五、六、
七去除级数分别余三、三、五、五。
要求用筛选法求这个楼梯最少有多少级。
【答案】383级
【参考程序1】
vara:
array[1..1000]ofboolean;
array[1..10]ofinteger;
k,i,n,t:
begin
fori:
=2to1000doa[i]:
=true;
=2;
t:
b[1]:
b[2]:
b[3]:
=3;
b[4]:
b[5]:
=5;
b[6]:
{表示各种跨法的余数}
repeat
=2to1000do{每一次筛选都从头到尾}
ifa[k]=truethen
if(k-b[t])modn<
0thena[k]:
=false;
{把不可能情况筛去}
n:
=n+1;
=t+1;
{下一种可能}
untiln>
7;
{一共筛7次}
=2to1000doifa[i]=truethenbeginwrite(i:
5);
halt;
end.
【参考程序2】
constmax=1000;
vari:
array[1..max]of0..7;
repeati:
=i+2;
=a[i]+1;
untili>
max;
{一步跨二级}
=i+3;
{三}
=i+4;
{四}
=i+5;
{五}
=i+6;
{六}
=i+7;
{七}
=1tomaxdoif(a[i]=6)thenbeginwriteln(i);
end.{跨了6次的梯级便为所求}
【参考程序3】程序3是程序2的精简,具有比程序2更好的通用性。
array[2..7]ofbyte=(1,2,3,3,5,5);
{各种跨法剩余的级数}
vari,j:
{置初值}
=2to7dobegin{从2级到7级}
=b[j];
=i+j;
{每一次可能跨到的级数}
{某级跨到一次,记录一次}
{从头跨到尾}
=1tomaxdo
if(a[i]=6)then{跨了6次的梯级便为所求}
beginwriteln(i);
{找到第一个满足条件的便可结束程序}
.context求最大公约数
【题目】求两个正整数的最大公约数
【算法】用辗转相除法(参看P40例3)
varm,n,r,t:
if(n<
=0)or(m<
=0)thenbeginwriteln('
error!
ifm<
nthenbegint:
=m;
=n;
=t;
{大数放m,小数放n}
r:
=mmodn;
{r:
余数}
whiler<
0dobegin
=r;
yushu:
.context素数2
【问题】任给一个自然数n,求出这个自然数不同因数的个数。
例如n=6时,因为1,2,3,6这四个数均是6的因数,故输出为total=4。
【算法】类似判断素数的方法。
如果发现n有一个≤sqr(n)的因数,必然同时有一个≥sqr(n)的因数。
6有一个因数2,则必有另一因数3。
因为2*3=6
varn,nums,k,i:
inputn:
readln(n);
ifn<
=0thenwriteln('
N>
0!
!
untiln>
0;
k:
=trunc(sqrt(n));
nums:
=2tokdo
ifnmodi=0thennums:
=nums+2;
ifn=sqr(k)thendec(nums);
nums:
nums);
.context万年历
【题目】输入年、月、日,求这一天是星期几。
【算法提要】求出这一天离公元1年的元旦有多少天days,然后对7求余
const
first=1;
{公元1年为基准}
first_week=1;
{公元1年的元旦为星期一}
yue:
array[1..12]of1..31=(31,28,31,30,31,30,31,31,30,31,30,31);
week_:
array[0..6]ofstring[20]=('
Sunday'
'
Monday'
Tuesday'
Wedsday'
Thursday'
Friday'
Saturday'
var
days,week,year,month,date,i,years:
year:
readln(year);
month'
readln(month);
date'
readln(date);
years:
days:
=firsttoyear-1do
if(imod400=0)or(imod4=0)and(imod100<
0)then
beginyears:
=years+1;
{注意处理闰年的情况}
=(year-first)*365+years;
{离基准年过了多少天}
=1tomonth-1dodays:
=days+yue[i];
{本年过了多少个月}
=1todatedodays:
=days+1;
{本月过了多少天}
if((yearmod400=0)or(yearmod4=0)and(yearmod100<
0))
and(month>
3)thendays:
{如果本年为闰年,且月份超2月,
还要考虑加1}
week:
=((days-1)mod7+first_week)mod7;
{求星期数}
itis'
week_[week]);
【参考程序2】用公式法:
=trunc((year-1)*(1+1/4-1/100+1/400)+c)
用求出的days对7求余数。
其中c为该天离该年元旦的天数
days,week,year,month,date,i:
=trunc((year-1)*(1+1/4-1/100+1/400)+days);
=daysmod7;
.context猴子选大王
【问题】n只猴子选大王,选举办法如下:
从头到尾1,2,3报数,凡报3的退出,
余下的从尾到头1,2,3报数,凡报3的退出...如此类推,当剩下两
只猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置?
【测试数据】
n│7│10│20│100│
──┼─┼─┼─┼──┼
位置│2│8│16│77│
constnumber=3;
varn,num,i,total:
array[1..100]ofboolean;
order:
boolean;
{队伍中剩下的猴子数}
=1tondoa[i]:
rep
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广州 编程 习题集
![提示](https://static.bingdoc.com/images/bang_tan.gif)