算法编程试题.docx
- 文档编号:9124399
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:67
- 大小:51.26KB
算法编程试题.docx
《算法编程试题.docx》由会员分享,可在线阅读,更多相关《算法编程试题.docx(67页珍藏版)》请在冰点文库上搜索。
算法编程试题
算法编程试题==
LT
算法编程试题
【程序1】
题目:
古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一
对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21....
【程序2】
题目:
判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:
判断素数的方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
做了【程序3】
题目:
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
【程序4】
题目:
将一个正整数分解质因数。
例如:
输入90,打印出90=2*3*3*5。
程序分析:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
【程序5】
题目:
利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下
的用C表示。
1.程序分析:
(a>b)?
a:
b这是条件运算符的基本例子。
【程序6】
题目:
输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:
利用辗除法。
【程序7】
题目:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:
利用while语句,条件为输入的字符不为'\n'.
做了【程序8】
题目:
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),
几个数相加有键盘控制。
1.程序分析:
关键是计算出每一项的值。
【程序9】
题目:
一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程找出1000以内的所有完
数。
【程序10】
题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多
少米?
第10次反弹多高?
【程序11】
题目:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
1.程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
【程序12】
题目:
企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万
元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部
分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可
提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:
请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
【程序13】
题目:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:
在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足
如下条件,即是结果。
请看具体分析:
【程序14】
题目:
输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且
输入月份大于3时需考虑多加一天。
【程序25】
题目:
一个5位数,判断它是不是回文数。
即12321是回文数,个位与万位相同,十位与千位相同。
【程序26】
题目:
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
1.程序分析:
用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
【程序27】
题目:
求100之内的素数
【程序28】
题目:
对10个数进行排序
1.程序分析:
可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第
二个元素与后8个进行比较,并进行交换。
【程序29】
题目:
求一个3*3矩阵对角线元素之和
1.程序分析:
利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
【程序30】
题目:
有一个已经排好序的数组。
现输入一个数,要求按原来的规律将它插入数组中。
1.程序分析:
首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,
依次后移一个位置。
做完【程序31】
题目:
将一个数组逆序输出。
1.程序分析:
用第一个与最后一个交换。
【程序32】
题目:
取一个整数a从右端开始的4~7位。
程序分析:
可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。
可用~(~0<<4)
(3)将上面二者进行&运算。
【程序33】
题目:
打印出杨辉三角形(要求打印出10行如下图)
1.程序分析:
1
11
121
1331
14641
15101051
【程序34】
题目:
输入3个数a,b,c,按大小顺序输出。
1.程序分析:
利用指针方法。
【程序35】
题目:
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
【程序36】
题目:
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
【程序37】
题目:
有n个人围成一圈,顺序排号。
从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下
的是原来第几号的那位。
【程序38】
题目:
写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
【程序39】
题目:
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数
1/1+1/3+...+1/n(利用指针函数)
【程序40】
题目:
字符串排序。
【程序41】
题目:
海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一
个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中
,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
【程序42】
题目:
809*?
?
=800*?
?
+9*?
?
+1
其中?
?
代表的两位数,8*?
?
的结果为两位数,9*?
?
的结果为3位数。
求?
?
代表的两位数,及809*?
?
后的结果。
【程序43】
题目:
求0—7所能组成的奇数个数。
【程序44】
题目:
一个偶数总能表示为两个素数之和。
【程序45】
题目:
判断一个素数能被几个9整除
【程序46】
题目:
两个字符串连接程序
做完【程序47】
题目:
读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
【程序48】
题目:
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:
每位数字
都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
做完【程序49】
题目:
计算字符串中子串出现的次数
【程序50】
题目:
有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
【程序1】
题目:
古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21....
publicclassProg1{
publicstaticvoidmain(String[]args){
intn=10;
System.out.println("第"+n+"个月兔子总数为"+fun(n));
}
privatestaticintfun(intn){
if(n==1||n==2)
return1;
else
returnfun(n-1)+fun(n-2);
}
}
【程序2】
题目:
判断101-200之间有多少个素数,并输出所有素数。
程序分析:
判断素数的方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
publicclassProg2{
publicstaticvoidmain(String[]args){
intm=1;
intn=1000;
intcount=0;
//统计素数个数
for(inti=m;i if(isPrime(i)){ count++; System.out.print(i+""); if(count%10==0){ System.out.println(); } } } System.out.println(); System.out.println("在"+m+"和"+n+"之间共有"+count+"个素数"); } //判断素数 privatestaticbooleanisPrime(intn){ booleanflag=true; if(n==1) flag=false; else{ for(inti=2;i<=Math.sqrt(n);i++){ if((n%i)==0||n==1){ flag=false; break; } else flag=true; } } returnflag; } } 【程序3】 题目: 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 程序分析: 利用for循环控制100-999个数,每个数分解出个位,十位,百位。 publicclassProg3{ publicstaticvoidmain(String[]args){ for(inti=100;i<1000;i++){ if(isLotus(i)) System.out.print(i+""); } System.out.println(); } //判断水仙花数 privatestaticbooleanisLotus(intlotus){ intm=0; intn=lotus; intsum=0; m=n/100; n-=m*100; sum=m*m*m; m=n/10; n-=m*10; sum+=m*m*m+n*n*n; if(sum==lotus) returntrue; else returnfalse; } } 【程序4】 题目: 将一个正整数分解质因数。 例如: 输入90,打印出90=2*3*3*5。 程序分析: 对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 publicclassProg4{ publicstaticvoidmain(String[]args){ intn=13; decompose(n); } privatestaticvoiddecompose(intn){ System.out.print(n+"="); for(inti=2;i while(n%i==0&&n! =i){ n/=i; System.out.print(i+"*"); } if(n==i){ System.out.println(i); break; } } } } 【程序5】 题目: 利用条件运算符的嵌套来完成此题: 学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 程序分析: (a>b)? a: b这是条件运算符的基本例子。 publicclassProg5{ publicstaticvoidmain(String[]args){ intn=-1; try{ n=Integer.parseInt(args[0]); }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("请输入成绩"); return; } grade(n); } //成绩等级计算 privatestaticvoidgrade(intn){ if(n>100||n<0) System.out.println("输入无效"); else{ Stringstr=(n>=90)? "分,属于A等": ((n>60)? "分,属于B等": "分,属于C等"); System.out.println(n+str); } } } 【程序6】 题目: 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析: 利用辗除法。 publicclassProg6{ publicstaticvoidmain(String[]args){ intm,n; try{ m=Integer.parseInt(args[0]); n=Integer.parseInt(args[1]); }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("输入有误"); return; } max_min(m,n); } //求最大公约数和最小公倍数 privatestaticvoidmax_min(intm,intn){ inttemp=1; intyshu=1; intbshu=m*n; if(n temp=n; n=m; m=temp; } while(m! =0){ temp=n%m; n=m; m=temp; } yshu=n; bshu/=n; System.out.println(m+"和"+n+"的最大公约数为"+yshu); System.out.println(m+"和"+n+"的最小公倍数为"+bshu); } } 【程序7】 题目: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 程序分析: 利用while语句,条件为输入的字符不为'\n'. importjava.util.Scanner; publicclassProg7_1{ publicstaticvoidmain(String[]args){ System.out.print("请输入一串字符: "); Scannerscan=newScanner(System.in); Stringstr=scan.nextLine();//将一行字符转化为字符串 scan.close(); count(str); } //统计输入的字符数 privatestaticvoidcount(Stringstr){ StringE1="[\u4e00-\u9fa5]";//汉字 StringE2="[a-zA-Z]"; StringE3="[0-9]"; StringE4="\\s";//空格 intcountChinese=0; intcountLetter=0; intcountNumber=0; intcountSpace=0; intcountOther=0; char[]array_Char=str.toCharArray();//将字符串转化为字符数组 String[]array_String=newString[array_Char.length];//汉字只能作为字符串处理 for(inti=0;i array_String[i]=String.valueOf(array_Char[i]); //遍历字符串数组中的元素 for(Strings: array_String){ if(s.matches(E1)) countChinese++; elseif(s.matches(E2)) countLetter++; elseif(s.matches(E3)) countNumber++; elseif(s.matches(E4)) countSpace++; else countOther++; } System.out.println("输入的汉字个数: "+countChinese); System.out.println("输入的字母个数: "+countLetter); System.out.println("输入的数字个数: "+countNumber); System.out.println("输入的空格个数: "+countSpace); System.out.println("输入的其它字符个数: "+countSpace); } } importjava.util.*; publicclassProg7_2{ publicstaticvoidmain(String[]args){ System.out.println("请输入一行字符: "); Scannerscan=newScanner(System.in); Stringstr=scan.nextLine(); scan.close(); count(str); } //统计输入的字符 privatestaticvoidcount(Stringstr){ List char[]array_Char=str.toCharArray(); for(charc: array_Char) list.add(String.valueOf(c));//将字符作为字符串添加到list表中 Collections.sort(list);//排序 for(Strings: list){ intbegin=list.indexOf(s); intend=list.lastIndexOf(s); //索引结束统计字符数 if(list.get(end)==s) System.out.println("字符‘"+s+"’有"+(end-begin+1)+"个"); } } } 【程序8】 题目: 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 程序分析: 关键是计算出每一项的值。 importjava.util.Scanner; publicclassProg8{ publicstaticvoidmain(String[]args){ System.out.print("求s=a+aa+aaa+aaaa+...的值,请输入a的值: "); Scannerscan=newScanner(System.in).useDelimiter("\\s*");//以空格作为分隔符 inta=scan.nextInt(); intn=scan.nextInt(); scan.close();//关闭扫描器 System.out.println(expressed(2,5)+add(2,5)); } //求和表达式 privatestaticStringexpressed(inta,intn){ StringBuffersb=newStringBuffer(); StringBuffersubSB=newStringBuffer(); for(inti=1;i subSB=subSB.append(a); sb=sb.append(subSB); if(i sb=sb.append("+"); } sb.append("="); return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 编程 试题