20210306

算法训练 二进制数数

问题描述

给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
  如5的二进制为101,包含2个“1”。

输入格式

第一行包含2个数L,R

输出格式

一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。

样例输入

2 3

样例输出

3

数据规模和约定

L<=R<=100000;

解题思路

本题由于是要统计1的个数,则采取数组存储二进制数的每一位比较好,也就是需要一步一步的统计0和1,因此采用十进制转二进制的方法。然后再遍历统计好的数组找1即可。

代码实现

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		int res=0; 
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int m = scanner.nextInt();
		for(int i=n;i<=m;i++) {		
			String b = Integer.toBinaryString(i);
			res +=geshu(b);
		}
		System.out.println(res);
	}
	static int geshu(String b) {
		int sum=0;
		for(int i=0;i<b.length();i++) {
			if(b.charAt(i)=='1')
				sum++	;
		}
		return sum;
	}
}

视频学习 吝啬的国度

蓝桥杯培训内部讲解-吝啬的国度

学习心得

图的邻接矩阵存储是一种顺序分配和链式分配相结合的存储结构。如这个表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。如词条概念图所示,表结点存放的是邻接顶点在数组中的索引。对于无向图来说,使用邻接表进行存储也会出现数据冗余,表头结点A所指链表中存在一个指向C的表结点的同时,表头结点C所指链表也会存在一个指向A的表结点。
邻接表是图的一种最主要存储结构,用来描述图上的每一个点。对图的每个顶点建立一个容器(n个顶点建立n个容器),第i个容器中的结点包含顶点Vi的所有邻接顶点。

吝啬的国度

描述
在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。
输入
第一行输入一个整数M表示测试数据共有M(1<=M<=5)组
每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000),N表示城市的总个数,S表示参观者所在城市的编号
随后的N-1行,每行有两个正整数a,b(1<=a,b<=N),表示第a号城市和第b号城市之间有一条路连通。
输出
每组测试数据输N个正整数,其中,第i个数表示从S走到i号城市,必须要经过的上一个城市的编号。(其中i=S时,请输出-1)
样例输入
1
10 1
1 9
1 8
8 10
10 3
8 6
1 2
10 4
9 5
3 7
样例输出
-1 1 10 10 9 8 3 1 1 8

代码实现

import java.util.ArrayList;
import java.util.Scanner;
 
 
public class Main {
	static ArrayList<city> citys;
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int M = scanner.nextInt();
		while(M-->0){
			int N = scanner.nextInt();
			int S = scanner.nextInt()-1;
			citys = new ArrayList<city>();
			for(int i = 0;i < N;i++){
				citys.add(new city(i));
			}
			for(int i = 0;i < N-1;i++){
				int a = scanner.nextInt();
				int b = scanner.nextInt();
				citys.get(a-1).nextCitys.add(b-1);
				citys.get(b-1).nextCitys.add(a-1);
			}
			for(int i = 0;i < N;i++){
				search Search = new search(S,i);
				Search.searchs();
			}
		}
        scanner.close();
	}
	static class city{
		public ArrayList<Integer> nextCitys;
		int id;
		city(int id){
			this.id = id;
			this.nextCitys = new ArrayList<Integer>();
		}
	}
	static class search{
		int startCityId;
		int endCityId;
		ArrayList<Integer> searchsCitys = new ArrayList<Integer>();
		boolean flag = true;
		String ends;
		search(int startCityId,int endCityId){
			this.startCityId = startCityId;
			this.endCityId = endCityId;
		}
		void searchs(){
			if(startCityId != endCityId){
				searchNext(startCityId,endCityId);
				System.out.print(ends+" ");
			}else{
				System.out.print("-1 ");
			}
		}
		void searchNext(int nowCityId,int endCityId){
			for(int i = 0;i < searchsCitys.size();i++){
				if(nowCityId == searchsCitys.get(i)){
					return;
				}
			}
			searchsCitys.add(nowCityId);
			if(flag){
				city nowCity = citys.get(nowCityId);
				for(int i = 0;i < nowCity.nextCitys.size();i++){
					city nextCity = citys.get(nowCity.nextCitys.get(i));
					if(nextCity.id == endCityId){
						flag = false;
						ends = nowCity.id+1+"";
						break;
					}else{
						searchNext(nextCity.id,endCityId);
					}
				}
			}
		}
	}
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页