普通编程

普通编程倍数 计算在 1032 到 453 之内 234 的倍数的个数 本题是一个大数的题有些同学用的方法是 long long 型的数据做运算 而我查资料是用 BigInteger 来处理 package com qcx import java math BigInteger import java util Scanner public class

大家好,我是讯享网,很高兴认识大家。
  1. 倍数
    计算在1032到453之内234的倍数的个数。
    本题是一个大数的题有些同学用的方法是long long 型的数据做运算,而我查资料是用BigInteger来处理:
package com.qcx; import java.math.BigInteger; import java.util.Scanner; public class BeiShu { //1032 453 234 public static void main(String[] args) { Scanner in = new Scanner(System.in); BigInteger n = BigInteger.valueOf(1032); BigInteger d = BigInteger.valueOf(234); BigInteger t = new BigInteger("453"); System.out.println(t.divide(d)); System.out.println(n.divide(d)); } } //实际答案应该是n/d-t/d; 

讯享网

为什么是n/d-t/d呢?我也不太清楚,还请赐教。一直有这个疑问。

讯享网package com.qcx; public class Birthday { public static void main(String[] args) { /int i,k;//i为开始吹蜡烛的年龄,m为现在的年龄 int i=1,sum;//sum为吹灭蜡烛的总数 for(;i<100;i++) { sum=0; for(int j=i;j<100;j++) { //从i岁开始计算加若干个数至sum=236时跳出循环 sum=sum+j; if(sum==236) { System.out.println(i); break; } } } } } 

先假设该人超不过一百岁,所以设置一个范围。从i岁开始吹蜡烛,吹到j岁一共吹了236跟,所以用两个简单的for循环判断,等到其总数到了236时,则i为开始的年龄。

  1. 复数幂
    (2+3i)^n ,该复数的n次幂。当n为时该复数是多少。若i的系数大于0 的话输出a+bi,否则输出a-bi;
    举个例子:(a+bi)*(A+Bi)=(aA-bB)+(Ab+aB)i
    (我也不知道我这么做了还是不对,输出-1±1i)
    参考以下代码是可以理解的,但是我的就是运行不出来。
package com.qcx; public class FuShuMi2 { public static void main(String[] args) { long a=2,fir=2; long b=3,sed=3; long c=0,thi=0; for(int i=2;i<=;i++){ thi=-(b*sed); sed=a*sed+b*fir; fir=a*fir+thi; } if(sed>=0) System.out.println(fir+"+"+sed+"i"); else{ System.out.println(fir+""+sed+"i"); } } } //-i 

因为这个数实在是太大 了所以只能用long型数据进行计算。

讯享网package com.qcx; import java.util.Scanner; public class GusseNumber { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("请在心中想好一个数字(1~100),我来猜"); System.out.println("我每猜一个数字,你要告诉我是“猜大了”,“猜小了”,还是“猜中”"); Scanner scan = new Scanner(System.in); int v1 = 1; int v2 = 100; for(;;){ int m = (v1 + v2)/2; System.out.println("我猜是:" + m); System.out.println("1.猜得太大了"); System.out.println("2.猜得太小了"); System.out.println("3.猜中!"); System.out.print("请选择:"); int user = Integer.parseInt(scan.nextLine()); if(user==3) break; if(user==1) v2=m-1; System.out.println("v1:"+v1); if(user==2) v1=m+1; System.out.println("v2:"+v2); } } } 

5.煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),

如果一共有100层,共有多少个煤球?

请填表示煤球总数目的数字。

package com.qcx; public class MeiQiu { public static void main(String[] args) { // TODO Auto-generated method stub int sum=0; //sum为总数 int count=0 ; for(int i=1;i<=100;i++) { count=count+i;//本层总数 sum=sum+count;//总数 } System.out.println(sum); } } 

1层 1个
2层 3个
3层 6个
4层 10个

可以看出煤球数目是上一层的总数加上本层层数就是本层煤球的总数。

  • 若青蛙从某个早晨开始向外爬,当 high=60405,up=105,dow=35计算青蛙多少天能够爬出井口?
讯享网package com.qcx; / * * @author 仇晨旭 * 有一口深度为 high 米的水井,井底有一只青蛙,它每天白天能够沿井壁向上爬 up米,夜里则顺井壁向下滑 down 米。 * 若青蛙从某个早晨开始向外爬,当 high=60405,up=105,dow=35计算青蛙多少天能够爬出井口? * 注意:不能简单地认为每天上升的高度等于白天向上爬的距离减去夜间下滑的距离,因为若白天能爬出井口,则不必等到晚上。 */ import java.util.Scanner; public class QingWa { public static void main(String []args){ int hight=10; int up=3,dow=2,day=0; int sum=0; do { sum+=up; //上升的距离加到总和 day++; //爬上去的那天也算一天,所以当总和加上爬上去的那天的上升距离大于高度时,就是当天爬上去的也要计入一天 if(sum>=hight) break; sum-=dow; //总和减去下降的距离 }while(true); System.out.println(day); } } 

当青蛙在白天爬上去的时候晚上就不会下落了,所以应该先判断青蛙爬总的高度加上白天的高度是否大于井的总高度,若大于,则青蛙在该天爬出来,就不需要计算晚上下落的距离了。

7.第二大数字
编写一个程序,读入一组整数(不超过20个),当用户输入0时,表示输入结束。
然后程序将从这组整数中,把第二大的那个整数找出来,并把它打印出来。
说明:(1)0表示输入结束,它本身并不计入这组整数中。
(2)在这组整数中,既有正数,也可能有负数。
(3)这组整数的个数不少于2个。
 输入格式:输入只有一行,包括若干个整数,中间用空格隔开,最后一个整数为0。
 输出格式:输出第二大的那个整数。


讯享网

package com.qcx; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; / * 编写一个程序,读入一组整数(不超过20个),当用户输入0时,表示输入结束。 * 然后程序将从这组整数中,把第二大的那个整数找出来,并把它打印出来。 * 说明:(1)0表示输入结束,它本身并不计入这组整数中。 * (2)在这组整数中,既有正数,也可能有负数。 * (3)这组整数的个数不少于2个。 * 输入格式:输入只有一行,包括若干个整数,中间用空格隔开,最后一个整数为0。 * 输出格式:输出第二大的那个整数。 */ public class SecondNumber { public static void main(String[] args) { Scanner input=new Scanner(System.in); //输入语句 ArrayList<Integer>num=new ArrayList<>(); //创建一个数组 //for循环,当a不等于0时循环并且添加到该数组里,当a=0时结束 for(int a=input.nextInt();a!=0;a=input.nextInt()) num.add(a); //对数组进行排序sort Collections.sort(num); System.out.println(num.get(num.size()-2)); } } 

分析:将输入的数在for循环中存入num集合中,当a不等于0 时循环,a等于0时结束,在for循环中用sort方法对其进行排序,然后输出第二大的整数。

  1. 报数游戏
    有 n 个小朋友做游戏,他们的编号分别是 1,2,3…n。
    他们按照编号从小到大依次顺时针围成一个圆圈,从第一个小朋友开始从 1报数,依次按照顺时针方向报数(加一),报 m 的人会离开队伍,然后下一个小朋友会继续从 1 开始报数,直到只剩一个小朋友为止。。请问最后剩下编号是几的小朋友。
讯享网package com.qcx; import java.util.Vector; public class Sum { public static void main(String[] args) { Vector a=new Vector(); for(int i=1;i<11;i++) { a.add(i); } for(;;) { if(a.size()==1) break; for(int k=0;k<2;k++) { //循环两次,把每一次的0位置的数放在最后面,然后第三次循环时跳出for移除该数字 a.add(a.remove(0)); } a.remove(0); } System.out.println(a); } } 

分析:先创建一个集合并在集合中放入10个小朋友。进行for循环,for循环只循环两次把报一和二的小朋友放在集合最后面,报三的小朋友删除,最后循环至只剩一个小朋友为止。

 package com.qcx; public class SuShu { public static void main(String[] args) { // TODO Auto-generated method stub int N=100; for(int i=1;i<=N;i++){ int j=2; for(;j<i;j++) { if((i%j)==0) break; } if(i==j) System.out.println(i); } } } 

素数的概念是除了一和他本身没有任何可以被他整除的数。

  • 循环中从2开始判断,找所有小于他本身的数,若没有可以整除的则跳出循环,并且判断i和j是否相等,这个循环足以说明i除以比它本身小的数字(除了一)没有可以整除的所以i就是素数。

9.分解字符串
输入一个字符串在其不连续处段开,并且输出。
输出样例
12345
23456
89

讯享网package com.qcx; public class test2 { public static void main(String[] args) { String s = ""; String t="1"; for(int i=1; i<s.length(); i++){ if(s.charAt(i)==s.charAt(i-1)+1){ //判断第i个字符串是否与第(i-1)个字符串加一相等,若相等,则用t记录 t += s.charAt(i); }else{ //不相等时,输出t,再将该字符传给t,进行后续判断。 System.out.println(t); //t=s.substring(i, i+1); //截取断开处的字符串给t t=""+s.charAt(i); //使断开处加一个空字符重新成为一个新串继续判断 } } System.out.println(t); } } 

分析:判断第一个数加1是否等于后面的那个数,若等于则将其存入t中,若不等于则把该位置的字符加一个空字符给了t使其成为一个新串进行后续判断最后输出t,但是我认为这个算法只能计算1开头的字符串,若字符串的顺序不是1开头的话就会输出不符合要求的答案。如果把t += s.charAt(i-1);就会把后面字符串的第一个数加入到前面字串中,若把判断语句改成s.charAt(i)==1+s.charAt(i+1),for从i=0循环则到最后又会出现越界。很蓝廋啊!!!大佬教教我应该怎么做才可以全都考虑进去。

package com.qcx; / * 返回第一个数字,若没有数字则返回-1 */ public class test3 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(getFirstNum("ahsj5dhdsj")); } public static int getFirstNum(String s){ if(s==null || s.length()==0) return -1; char c = s.charAt(0); if(c>='0' && c<='9') return c-'0'; //相当于阿斯克码,将char类型转换为int型 return getFirstNum(s.substring(1)); //填空 } } 

分析:先判断字符串为空或者长度为0时则返回-1;然后去s的第一个字符,判断是否是数字,是则返回c-‘0’(这是将char类型转化为int型) ,否则进行递归,判断后面的字串。

11.杨辉三角
判断杨辉三角中的第m层的n个元素。
下面的代码是输出第m层的所有元素。

讯享网package com.qcx; / * 杨辉三角 *1 1层 *1 1 2层 *1 2 1 3层 *1 3 3 1 4层 *1 4 6 4 1 5层 *1 5 10 10 5 1 6层 */ public class Yanghuisanjiao { //打印第m层的n个元素 public static int f(int m,int n) { if(n==0||n==m) return 1; return f(m-1,n)+f(m-1,n-1); } public static void main(String[] args) { // TODO Auto-generated method stub int level=5; //第level层的元素 for(int i=0;i<=level;i++) { System.out.print(f(level,i)+" "); } } } 

先将杨辉三角左对齐然后就可以观察到第m层的n个元素由第m-1行的n和元素和m-1行的n-1个元素相加所得。而杨辉三角第一个和最后一个元素都为1,用递归找到对应的元素相加即可。

若有不足之处请指教。

小讯
上一篇 2025-01-11 21:16
下一篇 2025-01-12 07:15

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/67839.html