经典基础刷题


弱鸡开始走。。。跑。。。飞。。。

土地开垦中。。。。

经典原生基础题:

1数字反序列输出
//数字的反序 输入:1234 返回4321

public class Main {
    public static void main(String[] args) {
        //1111*9=9999最大的四位数,因此原数不能超过1111
        for(int i=1000;i<1112;i++){
        
        int resum=0,ai=i;
        for i in range(4):
            resum=resum*10+ai%10;
            ai=ai/10;


     if(resum==i*9){
         System.out.println(resum);
     }
    }
}
2.数字变字符放入数组
//题目:实现特殊乘法


//知识点:将数字变为字符串放入数组


import java.util.Scanner;



//数字变为字符串存到数组中
//特殊乘法123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5
public class Main{
    public static void main(String[] args) {
        System.out.println("please input two number:");
        Scanner sc=new Scanner(System.in);
        //输入s1,s2
        int s1=sc.nextInt();
        //存放s1和s2的值
        int cun1=s1;
        int s2=sc.nextInt();
        int cun2=s2;
        //两个数组存放s1和s2的每一位
        int[] arr1=new int[10];
        int[] arr2=new int[10];
        int i=0;//记录位数
        //循环用取余法取余,将s1每一位存到数组arr1
        while(s1%10!=0){
            //得到余数
            arr1[i]=s1%10;
            //取整
            s1=s1/10;
            i++;
        }

        int lengths1=i;
        i=0;
        //同样的对s2取余放到数组arr2中
        while(s2%10!=0){
            arr2[i]=s2%10;
            s2=s2/10;
            i++;

        }
        int lengths2=i;
        i=0;
        //用于存放结果
        int ans=0;
        //两个数组相乘
        for(;i<=lengths1;i++){
            for(int j=0;j<=lengths2;j++){
                ans=ans+arr1[i]*arr2[j];
            }
        }

        System.out.println(cun1+"*"+cun2+"="+ans);



    }
}
3.成绩排序输出(序号+分数)

题目描述

用一维数组存储学号和成绩,然后,按成绩排序输出。

输入描述:

输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。

输出描述:

按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。

示例1

输入

3
1 90
2 87
3 92

输出

2 87
1 90
3 92

解题:

思想:分数和成绩绑定一起放入数组下标中

#include<iostream>;
using namespace std;
/**
初始化100个学生成绩,每个相同分数的最多有100人,所以数组空间长度10100
将每位学生成绩编码,编码方式 score*100+num,并作为下标数组下标。
输出成绩

*/
int main() {
	int N;
	while (cin >> N) {
		int num, score, arr[10100] = { 0 };
		while (N--) {
			cin >> num >> score;
			arr[score * 100 + num] = 1;//每一个学生成绩,用1表示
			
		}
		cout << "students' grade:" << endl;
		for (int i = 0; i < 10099; i++) {
			if (arr[i]) {
				cout << i % 100 << " " << i / 100 << endl;
			}
		}
	}
	return 0;
}
4.成绩排序(名字+分数)

查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。

示例:
jack 70
peter 96
Tom 70
smith 67

从高到低 成绩
peter 96
jack 70
Tom 70
smith 67

从低到高

smith 67

jack 70
Tom 70
peter 96

输入描述:

输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开

输出描述:

按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

示例1

输入

3
0
fang 90
yang 50
ning 70

输出

fang 90
ning 70
yang 

解答:

#include<iostream> 
#include<vector> 
#include<string>
#include<algorithm>
using namespace std;

/**
 	n添加学生个数
	method  方法的选择
	知识点:主要运用vector容器,一个可以装任意类型的数组容器
	下面创建的容器:行是分数,列是名字
*/
int main(){
	int n;
	int method;
	//外面的那个< >最好留有空格,某些编译器无法通过编译
	vector< vector<string> > obj(101);//满分为100,因此容器的行 长101
	while (cin >> n >> method) {
		string name = "";
		int score;
		for (int i = 0; i < n; i++) {
			cin >> name >> score;
			obj[score].push_back(name);//将每一个输入分数的对应名字放到对应列的容器内

		}


		
		////method为1就升序
		if (method) {
			cout << "students' grade in ascending sort:" << endl;
			for (int i = 0; i < 100; i++) {
				//对应分数的位置有成绩,那么输出
				if (obj[i].size()) {
					for (int j = 0; j < obj[i].size(); j++) {
						cout << obj[i][j] << " "<<i << endl;
					}
				}
			}
		}
		//降序
		else {
			cout << "studengts' grades in descending sort:" << endl;
			for (int i = 100; i > 0; i--) {
				if (obj[i].size()) {
					for (int j = obj[i].size() - 1; j >= 0; j--) {
						cout << obj[i][j] << " " << i << endl;
					}
				}
			}
		}
	}
	return 0;
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读