弱鸡开始走。。。跑。。。飞。。。
土地开垦中。。。。
经典原生基础题:
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;
}