第十五周.

A、1的个数

题目描述

  • 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

输入

  • 输入一个整数(int类型)。

输出

  • 这个数转换成2进制后,输出1的个数。

样例输入 Copy

5

样例输出 Copy

2

1、戳我!输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数,这里还有十进制和十六进制的哟!
2、比较简洁的代码,可以看这个哦~

代码

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int n = sc.nextInt();
			int count = 0;
			String s = Integer.toBinaryString(n); //将n转为二进制数,并赋给s
			for (int i = 0; i < s.length(); i++) //进行循环
			    if (s.charAt(i) == '1') //charAt(int index)的作用是检测当前索引下的值
			       count++;
			System.out.println(count);
			
		}

	}

}

B、最小素数对

题目描述

  • 任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。

输入

  • 输入一个偶数。

输出

  • 输出两个素数。

样例输入 Copy

20

样例输出 Copy

7
13

代码

戳我戳我!

import java.util.Scanner;

public class Main {
	
	static int prime(int num) {
		for(int i=2;i<=Math.sqrt(num);i++)
			if(num%i==0)
				return 0; //不是素数
		return 1;  //是素数
	}

	static void solve(int num) {
		int dist = num;//记录两个素数之间的差距
		int t1=0,t2=0;//两个素数
		for(int i=2;i<=num/2;i++)
			if(prime(i)==1&& prime(num-i)==1)
				if(num-(2*i)<dist) {//更新素数之间的更短的距离
					dist = num-(2*i);
					t1 = i;
					t2 = num-i;
				}
		System.out.println(t1+"\n"+t2);
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int n = sc.nextInt();
			solve(n);
		}

	}

}

C、又是一道简单题

题目描述

  • 输入一个四个数字组成的整数 n,你的任务是数一数有多少种方法,恰好修改一个数字,把它 变成一个完全平方数(不能把首位修改成 0)。比如
    n=7844,有两种方法:3844=622 和 7744=882。

输入

  • 输入第一行为整数 T (1<=T<=1000),即测试数据的组数,以后每行包含一个整数 n (1000<=n<=9999)。

输出

  • 对于每组数据,输出恰好修改一个数字,把 n变成完全平方数的方案数

样例输入 Copy

2
7844
9121

样例输出 Copy

Case 1: 2
Case 2: 0

戳他戳他!细节真就不想说了,评测了几次只是因为输出的格式不对,一就是因为冒号后面有空格,我没注意到!又是一个小细节~

代码

import java.util.Scanner;

public class Main {
	static int a[] = new int[105];

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int T = sc.nextInt();
			
			for(int i=32;i<100;i++)
				a[i] = i*i;//记录平方的值
			for(int i=1;i<=T;i++) {
				int num = 0;
				int count = 0;
				int n = sc.nextInt();
				
				for(int k=32;k<100;k++) {
					int x = a[k];
					int y = n;
					for(int j=0;j<4;j++) {
						int w = x%10;
						int z = y%10;
						if(w!=z)
							count++;
						x/=10;
						y/=10;
					}
					
					if(count==1)
						num++;
					count=0;
					
				}
				System.out.println("Case "+i+": "+num);
			}
			
		}
	}

}

D、图的m着色问题

题目描述

  • 给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色,请输出着色方案。

输入

  • 输入第一行包含n,m,k分别代表n个结点,m条边,k种颜色,接下来m行每行有2个数u,v表示u和v之间有一条无向边,可能出现自环边,所以请忽略自环边。

输出

  • 输出所有不同的着色方案,且按照字典序从小到大输出方案。

样例输入 Copy

3 3 3
1 2
1 3
2 3

样例输出 Copy

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

代码

戳我戳我!

import java.util.Scanner;

public class Main {
	static int n,m,k,count=0;
	static int graph[][] = new int[105][105];
	static int color[] = new int[105];
	
	static boolean used(int t,int i) {
		for(int k=1;k<=n;k++)
			if(graph[t][k]==1 && color[k]==i)
				return false;
		return true;
	}
	
	static void backtrack(int t,int m) {
		if(t>n) {
			for(int i=1;i<=n;i++)
				System.out.print(color[i]+" ");
			count++;
			System.out.println();
		}
		else {
			for(int i=1;i<=m;i++) {
				if(used(t,i)) {
					color[t] = i;
					backtrack(t+1,m);
				}
				color[t] = 0;
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			n = sc.nextInt();//点
			m = sc.nextInt();//边
			k = sc.nextInt();//颜色
			
			for(int i=1;i<=m;i++) {
				int a = sc.nextInt();//开始的点
				int b = sc.nextInt();//结束的点
				if(a!=b) {
					graph[a][b] = 1;
					graph[b][a] = 1;
				}
			}
			
			for(int i=1;i<=n;i++) 
				color[i] = 0;
			
			backtrack(1,k);
			
		}

	}

}

E、N皇后

题目描述

  • 使用回溯法求解N后问题
  • 在这里插入图片描述

输入

  • 皇后的个数

输出

  • 每一种方案及总方案数

样例输入 Copy

4

样例输出 Copy

0 1 0 0
0 0 0 2
3 0 0 0
0 0 4 0
----------------
0 0 1 0
2 0 0 0
0 0 0 3
0 4 0 0
----------------
总方案数为:2

代码

戳我戳我!

import java.util.Scanner;

public class Main {
	static int N;//皇后个数
	static int m[];//同一列
	static int l[];//左斜线
	static int r[];//右斜线
	static int A[][];
	static int count = 0;//当前已找到的方案数
	
	static void queen(int i) {
		for(int j=0;j<N;j++) {
			if(A[i][j]==0 && r[i+j]==0 && m[j]==0 && l[i-j+N]==0) {
				A[i][j] = i+1;
				r[i+j] = m[j] = l[i-j+N] = 1;
				if(i==N-1) {
					count++;
					print(A);
				}else
					queen(i+1);
				A[i][j]=0;
				r[i+j] = m[j] = l[i-j+N] = 0;
			}
		}
	}
	
	static void print(int [][]A) {
		for(int i=0;i<N;i++) {
			for(int j=0;j<N;j++)
				System.out.print(A[i][j]+" ");
		    System.out.println();
		}
		System.out.println("----------------");	
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			N = sc.nextInt();
			A = new int[N][N];
			m = new int[2*N];
			l = new int[2*N];
			r = new int[2*N];
			queen(0);
			System.out.println("总方案数为:"+count);
			
		}

	}

}

F、素数环

题目描述

  • 现有1,2,3…,n,要求用这些数组成一个环,使得相邻的两个整数之和均为素数,要求你求出这些可能的环。

输入

  • 输入正整数n

输出

  • 输出时从整数1开始逆时针输出,同一个环只输出一次,且满足条件的环应按照字典序从小到大输出。
  • 注:每一个环都从1开始。

样例输入 Copy

6

样例输出 Copy

1 4 3 2 5 6
1 6 5 2 3 4

代码

戳我戳我!

import java.util.Scanner;

public class Main {
	static int []A;
	static int []prime;
	static int n;
	
	static boolean isp(int a,int b) {
		int c = a+b;
		for(int i=2;i<c;i++)
			if(c%i==0)
				return false;
		return true;
	}
	static void solve(int cur) {
		if(cur==n && isp(A[0],A[n-1])) {
			for(int i=0;i<n;i++)
				System.out.print(A[i]+" ");
			System.out.println();
		}
		for(int i=2;i<=n;i++) {
			if(prime[i]==0 && isp(i,A[cur-1])) {
				A[cur] = i;
				prime[i] = i;
				solve(cur+1);
				prime[i] = 0;
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			n = sc.nextInt();
			A = new int[n];
			A[0] = 1;
			prime = new int[n+1];
			solve(1);
		}

	}

}

【小编要准备考六级了,期末考试又来了啊啊啊啊啊啊!好啦,复习去!】
“许多人都在等待一个安全的环境,他们希望等所有的绿灯都亮了以后再出门。抱持这种想法的人,一辈子也无法走出家门。”

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年游四方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值