zl程序教程

您现在的位置是:首页 >  其他

当前栏目

编程入门、进阶100例(16-20)

2023-04-18 14:48:50 时间

索引目录

题外话:学编程越是学到后面,我就越发的感受到,刷题是提升编程技能最快的方式。学编程从入门到进阶,再到高阶,现在从16题开始就会有一些难度了,这里我会整理一些我刷过的一些题目。

十六、写出这个数(来源于PAT basic 1002)

16.1 问题描述

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字

Tips:这个输入的数字可能会很大,会溢出int、long的范围,所以我们用字符串输入

16.2 格式

输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100

输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

16.3 示例

样例输入: 1346

样例输出: yi si

解释一下:我们输入一串字符,将其转换为整数,将这个整数的各位数进行相加,也就是1+3+4+6=14,所以输出就是yi si

16.4 代码实现

java

import java.util.Scanner;

/**
 * @author gorit
 * @date 2019年3月25日10:57:55
 * @work 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字
 * */
public class Program2_1002 {
	public static void main(String args[])
	{
		//定义一个拼音字符串数组,存放数字对应的拼音。
		String[] pinYin = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
		
		Scanner in = new Scanner(System.in);
		String numString = in.next();//因为数字很大,用整数读取会溢出,所以以字符串形式存放读进来的数字
		
		int sum = 0;//计算输入数字的各位数的和
		for(int i = 0; i < numString.length(); i++)
		{//字符转换整数问题 Integer.ParseInt(numString);//使用字符串转数字的方法,但是这种方法并不适用这里
			sum = sum + (numString.charAt(i) - 48);//根据ASCII码,字符转换成数字需要-48
		}
		
		String sumString = sum + "";//将各位数字的和转换成字符串形式,用作拼音数组的索引
		for(int i = 0; i < sumString.length(); i++)
		{
			if(i != 0)
				System.out.print(" ");//格式化输出,第一个输出前无空格
			System.out.print(pinYin[sumString.charAt(i) - 48]);//输出结果
		}
		
	}
}

十七:数列求值(第十届蓝桥杯真题)

17.1 问题描述

我们知道斐波那列数列的第三个数等于前两个数之和,这个题是斐波那列数列的升级版,给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求 第 20190324 项的最后 4 位数字。

17.2 格式

输入格式 输入一个整数 20190324

输出格式 只有一个结果,输出一个整数

17.3 示例

样例输入: 20190324

样例输出: 输出一个整数,也就是第20190324项取最后四位数

17.4 代码实现

c

#include
int F[22000000]={0,1,1,1};
int main()
{
	for(int i=4;i<=20190324;i++){
		F[i]=(F[i-1]+F[i-2]+F[i-3])%10000;
	}
	printf("%d",F[20190324]);
	return 0;
} 

答案是4659

十八、字符串处理

18.1 问题描述

从键盘中输入一串字符串,然后输出字符串中大小字母,小写字母,数字的个数各为多少

18.2 格式

输入格式: 输入一行字符串

输出格式: 分别输出大写字母,小写字母,数字的个数各位多少

Tips:只能输入英文字符,不包括标点符号

18.3 示例

样例输入: ada132ABa

样例输出: 大小字母2 小写字母4 数字3

18.4 代码实现

import java.util.*;

//从控制台输入一串字符串统计小写的字母有多少个大写的字母有多少个,数字有多少个
public class Work2 {
	@SuppressWarnings("unlikely-arg-type")
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		StringBuffer str=new StringBuffer();
		str.append(in.next());
		int a = 0,b = 0;//a代表大写字母个数,b代表小写字母个数
		
		List<String> list=new ArrayList<String>();//大写字母
		List<String> list1=new ArrayList<String>();//小写字母
		
		for (char i = 'a',j='A'; i <='z'&& j<='Z'; i++,j++) {
			list.add(String.valueOf(i));
			list1.add(String.valueOf(j));
		}
		
		for (int i = 0; i < str.length(); i++) {
			for (int j = 0; j < list.size(); j++) {
				if(list.get(j).equals(str.substring(i, i+1))){
					a++;
				}else if(list1.get(j).equals(str.substring(i, i+1)))
					b++;
			}
		}
		
		System.out.println("字符串的大写字母个数:"+b+"	小写字母个数:"+a+"	数字个数:"+(str.length()-(a+b)));
	}
}

十九、进制转换问题(二进制转换十进制)

19.1 问题描述

输入一个又01组成数字,代表二进制数据,输出转换成的十进制数据

19.2 格式

样例输入: 一行数据,只包含0和1

样例输出: 这行二进制数据转换成的十进制数据

19.3 示例

样例输入 1001

样例输入 9

19.4 代码实现

import java.util.Scanner;

//二进制转十进制 1001 9
public class BinToTen {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		StringBuffer str=new StringBuffer();//读入二进制数据
		str.append(in.next());
		in.close();
		int num=0;
		for (int i = 0; i <str.length(); i++) {//二进制数据是从左往右读取的
			if(str.substring(i, i+1).equals("1")) {
				num+=(int)Math.pow(2, str.length()-i-1);
			}else {
				num+=0;
			}
		}
		System.out.println(num);
	}
}

二十、选择排序

20.1 问题描述

给定一个数字n,表示数组的长度,然后依次往数组中传入数据,然后运用选择排序的方式将数据打印出来

20.2 格式

样例输入: n 接下里是n个数字,中间用空格间隔

样例输出: 排序后的n个数字,中间用空格间隔

20.3 代码示例

样例输入: 5 2 3 7 1 9

样例输出; 1 2 3 7 9

20.4 代码实现

java

package sortArrays;

import java.util.Scanner;

/**
 * @author gorit
 * @date 2019年3月15日15:59:09
 * @选择排序的实现:重复"从待排序的数据中寻找最小值,将其
 * 	与序列最左边的数字进行交换" 
 * 
 * */
public class ChooseSort {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		//请输入数组的长度
		System.out.println("请输入数组的长度:");
		int n=in.nextInt();
		int[] array=new int[n];
		System.out.println("请依次输入元素,中间用空格间隔");
		for (int i = 0; i < array.length; i++) {
			//往数组中存入数据
			array[i]=in.nextInt();
		}
		arr(array);//传入数组
		for (int i = 0; i < array.length; i++) {//打印排序后的数组
			System.out.print(array[i]+" ");
		}
	}
	
	public static int[] arr(int[] array) {//还是从小到大进行排序,这里可以直接返回一个数组
		int min;//最小的元素
		int temp;//用来交换数据
		for (int i = 0; i < array.length-1; i++) {//遍历n-1个元素
			min=i;//被选择的元素
			for (int j = i+1; j < array.length; j++) {//遍历n-1个元素
				if(array[j]<array[min]) {
					min=j;//如果找到比下标为 min 的元素更小的元素,就把min的值替换
				}
			}
			if(i!=min) {//判断min的值还是不是一开始i的值,不是的话,就交换 之后改变的 min 的值,始终都能保证
				temp = array[i];
				array[i]=array[min];
				array[min]=temp;
			}
		}
		
		return array;//返回我们传入的数组(排序过后的)
	}
}