16.
【问题描述】
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
【输入形式】
输入一个整数int类型
【输出形式】
这个数转换成2进制后,输出1的个数
【样例输入】
5
【样例输出】
2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int cnt=0;
while(n!=0){
if(n%2==1){
cnt++;
}
n=n/2;
}
System.out.println(cnt);
}
}
17.
【问题描述】有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
【输入形式】输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
【输出形式】对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
【样例输入】 3 10 81 0
【样例输出】 1 5 40
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int myg;
myg=in.nextInt();
//in.nextLine();
while(myg!=0){
int cnt=0;
while(myg>=3){
cnt+=myg/3;
myg=(myg/3)+(myg%3);
};
if(myg==2){
cnt++;
myg=in.nextInt();
//in.nextLine();
}
else if(myg==1){
myg=in.nextInt();
//in.nextLine();
}
System.out.print(cnt+" ");
}
}
}
18.
【问题描述】某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。
【输入形式】每组输入有两行,第一行,输入雷达捕捉到的敌国导弹的数量k(k<=25),第二行,输入k个正整数,表示k枚导弹的高度,按来袭导弹的袭击时间顺序给出,以空格分隔。
【输出形式】每组输出只有一行,包含一个整数,表示最多能拦截多少枚导弹。
【样例输入】
8
300 207 155 300 299 170 158 65
【样例输出】 6
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] arr=new int[n];
int[] dp=new int[n];
for(int i=0;i<n;i++){
arr[i]=in.nextInt();
dp[i]=0;
}
int index=0;
int temp=0;
int max=0;
for(int i=0;i<n;i++){
temp=0;
index=0;
for(int j=0;j<i+1;j++){
if(arr[i]<=arr[j]){
if(temp<=dp[j]){
index=j;
temp=Math.max(temp,dp[j]);
}
}
}
dp[i]=dp[index]+1;
max=Math.max(max,dp[i]);
}
System.out.print(max);
}
}
19.
【问题描述】 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。子网掩码与 IP 地址结构相同,是32 位二进制数,其中网络号部分全为 “1” 和主机号部分全为 “0” 。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP 地址分别与它们的子网掩码相 “与” 后的结果相同,则说明这两台主机在同一子网中。示例:IP 地址192.168.0.1子网掩码255.255.255.0转化为二进制进行运算:IP地址11010000.10101000.00000000.00000001子网掩码11111111.11111111.11111111.00000000 AND运算11010000.10101000.00000000.00000000转化为十进制后为:192.168.0.0 IP 地址 192.168.0.254子网掩码 255.255.255.0转化为二进制进行运算:IP地址11010000.10101000.00000000.11111110子网掩码11111111.11111111.11111111.00000000 AND运算11010000.10101000.00000000.00000000 转化为十进制后为:192.168.0.0 通过以上对两台计算机IP 地址与子网掩码的 AND 运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。
【输入形式】输入子网掩码、两个地址
【输出形式】得到计算结果,如不在同一子网,则输出0
【样例输入】
255.255.255.0
192.168.224.254
192.168.10.4
【样例输出】
0
import java.util.Scanner;
public class Main {
public static String transfer(String str){
int a=Integer.parseInt(str);
int[] arr={0,0,0,0,0,0,0,0};
int i=7;
if(a<0||a>255){
return "00000000";
}
while(a>1){
int myw=a%2;
arr[i]=myw;
a=a/2;
i--;
}
arr[i]=a;
String ans="";
for(int j=0;j<8;j++){
ans+=arr[j];
}
return ans;
}
public static String dyb(String b){
String[] strarr=b.split("\\.");
String ejz="";
for(int i=0;i<4;i++){
if (!strarr[i].isEmpty()) {
ejz+=transfer(strarr[i]);
}
else{
ejz+="00000000";
}
}
return ejz;
}
public static String and(String ym,String ip){
String ans="";
int len=ym.length();
for(int i=0;i<len;i++){
if(ym.charAt(i)==ip.charAt(i)&&ym.charAt(i)=='1'){
ans+="1";
}
else{
ans+="0";
}
}
return ans;
}
public static int judge(String stra,String strb){
int len=stra.length();
for(int i=0;i<len;i++){
if (stra.charAt(i)!=strb.charAt(i)){
return 0;
}
}
return 1;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String zwym=in.nextLine();
String ip1=in.nextLine();
String ip2=in.nextLine();
zwym=dyb(zwym);
ip1=dyb(ip1);
ip2=dyb(ip2);
String and1=and(zwym,ip1);
String and2=and(zwym,ip2);
if(judge(and1,and2)==0){
System.out.print("0");
}
else{
System.out.print("1");
}
}
}
20.
【问题描述】你的朋友提议玩一个游戏:将写有数字的的n纸片放入口袋中,你可以从口袋中抽取三次纸片,每次记下纸片上的数字后都将其放回到口袋中,如果这三个数字的和是m,就是你赢,否则就是你朋友赢。请你编写一个程序,判断当纸片上所写的数字是k1,k2,…,kn时是否存在抽取三次之和为m的方案。
【输入形式】输入的第一行为一个正整数 n 表示口袋中纸片数目(int类型)第二行为一个正整数表示三个数字的和 第三行为n个整数表示每个纸片上的数字(int类型)
【输出形式】如果存在符合要求的方案,输出Y,否则,输出N。
【样例输入】
3
10
2 3 5
【样例输出】
Y
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
in.nextLine();
int s=in.nextInt();
in.nextLine();
int[] arr=new int[n];
for(int i=0;i<n;i++){
arr[i]=in.nextInt();
};
Arrays.sort(arr);
int flag=0;
for(int i=0;i<n-2;i++){
int sum=0;
sum+=arr[i];
if(arr[i]>=s){
break;
}
else{
for(int j=i+1;j<n-1;j++){
sum+=arr[j];
if(arr[j]>s||sum>s){
break;
}
else{
for(int k=j+1;k<n;k++){
sum+=arr[k];
if(arr[k]>s||sum>s){
break;
}
if(sum==s){
flag=1;
break;
}
}
}
}
}
};
if(flag==1){
System.out.println('Y');
}
else{
System.out.println('N');
};
}
}
21.
【问题描述】老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
【输入形式】输入包括多组测试数据。每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。 学生ID编号从1编到N。第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩,接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少,当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
【输出形式】对于每一次询问操作,在一行里面输出最高成绩.
【样例输入】
5 7
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 4 5
U 2 9
Q 1 5
【样例输出】5 6 5 9
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
in.nextLine();
int[] arr=new int[n];
for(int i=0;i<n;i++){
arr[i]=in.nextInt();
};
in.nextLine();
String myh;
for(int i=0;i<m;i++){
myh=in.nextLine();
String[] myharr=myh.split(" ");
String a=myharr[0];
int b=Integer.parseInt(myharr[1]);
int c=Integer.parseInt(myharr[2]);
if(a.equals("Q")){
int ma=0;
for(int j=b-1;j<=c-1;j++){
if(arr[j]>=ma){
ma=arr[j];
}
}
System.out.print(ma+" ");
}
else if(a.equals("U")){
arr[b-1]=c;
};
}
}
}
22.
【问题描述】吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,这对数字各包含乘积的一半位数的数字,数字选取后可任意排序,例如: 1260=21×60 1827=21×87 2187=27×81。写出一个程序,找出4位数的所有吸血鬼数字。
【输入形式】无
【输出形式】输出所有的吸血鬼数字,数字之间已空格分隔。
【样例输入】无
【样例输出】1260 1395 1435 1530 1827 2187 6880
public class Main {
public static boolean judge(int s){
String m01=Integer.toString(s);
String m02=Integer.toString(s);
String m03=Integer.toString(s);
String m04=Integer.toString(s);
String m1=Integer.toString(s);
String m2=Integer.toString(s);
String m3=Integer.toString(s);
String m4=Integer.toString(s);
for(int i=0;i<3;i++){
for(int j=i+1;j<4;j++){
int a1=Integer.parseInt(""+m1.charAt(i)+m1.charAt(j));
String btemp1=m01.replaceFirst(""+m1.charAt(i),"");
int b1=Integer.parseInt(btemp1.replaceFirst(""+m1.charAt(j),""));
if(a1*b1==s){
return true;
}
int a2=Integer.parseInt(""+m2.charAt(j)+m2.charAt(i));
String btemp2=m02.replaceFirst(""+m2.charAt(i),"");
int b2=Integer.parseInt(btemp2.replaceFirst(""+m2.charAt(j),""));
if(a2*b2==s){
return true;
}
int a3=Integer.parseInt(""+m3.charAt(i)+m3.charAt(j));
String btemp3=m03.replaceFirst(""+m3.charAt(i),"");
int b3=Integer.parseInt(btemp3.replaceFirst(""+m3.charAt(j),""));
int b3temp=b3;
b3=b3temp/10+(b3temp%10)*10;
if(a3*b3==s){
return true;
}
int a4=Integer.parseInt(""+m4.charAt(i)+m4.charAt(j));
String btemp4=m04.replaceFirst(""+m4.charAt(i),"");
int b4=Integer.parseInt(btemp4.replaceFirst(""+m4.charAt(j),""));
int b4temp=b4;
b4=b4temp/10+(b4temp%10)*10;
if(a4*b4==s){
return true;
}
}
}
return false;
}
public static void main(String[] args) {
int myg;
for(int i=1000;i<=9999;i++){
if(judge(i)){
System.out.print(i+" ");
}
}
}
}