1,排序
- 题目描写叙述:
-
? ? 对输入的n个数进行排序并输出。
- 输入:
-
? ? 输入的第一行包含一个整数n(1<=n<=100)。? ? 接下来的一行包含n个整数。
- 输出:
-
? ? 可能有多组測试数据,对于每组数据。将排序后的n个整数输出,每一个数后面都有一个空格。
? ? 每组測试数据的结果占一行。
- 例子输入:
-
4 1 4 3 2
- 例子输出:
-
1 2 3 4
总结:这个题目太简单了,实在想不到保研会考这样的题目,当然我用的也是最简单的冒泡排序,并且还是没优化的。shame。
#include<iostream>
using namespace std;
int main(){
int n,i,j;
int swap;
int arr[101];
while(cin>>n){
for(i=0;i<n;i++){
cin>>arr[i];
}
for(i=0;i<n;i++){
for(j=0;j<n-1-i;j++){
if(arr[j] > arr[j+1]){
swap=arr[j];
arr[j]=arr[j+1];
arr[j+1]=swap;
}
}
}
for(i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
return 0;
}
总结:感觉没什么,高速排序还是有些难度。可是掌握一前一后两个指针之后。也没什么。
#include<iostream>
using namespace std;
//高速排序的划分
int partion_arr(int arr[],int i,int j){
int x=arr[i];
while(i<j){
while(i<j && x <= arr[j]){
j--;
}
if(i<j){
arr[i]=arr[j];
i++;
}
while(i<j && x >= arr[i]){
i++;
}
if(i<j){
arr[j]=arr[i];
j--;
}
}
arr[i] = x;
return i;
}
//高速排序
void quick_sort(int arr[],int i,int j){
if(i<j){
int a = partion_arr(arr,i,j);
quick_sort(arr,a+1,j);
quick_sort(arr,i,a-1);
}
}
int main(){
int n,i;
int arr[101];
while(cin>>n){
for(i=0;i<n;i++){
cin>>arr[i];
}
quick_sort(arr,0,n-1);
for(i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
return 0;
}
2,IP地址
- 题目描写叙述:
-
? ? 输入一个ip地址串。推断是否合法。
- 输入:
-
? ? 输入的第一行包含一个整数n(1<=n<=500),代表以下会出现的IP地址的个数。
? ? 接下来的n行每行有一个IP地址,IP地址的形式为a.b.c.d。当中a、b、c、d都是整数。
- 输出:
-
? ? 可能有多组測试数据,对于每组数据,假设IP地址合法则输出"Yes!”,否则输出"No!”。
- 例子输入:
-
2 255.255.255.255 512.12.2.3
- 例子输出:
-
Yes! No!
- 提示:
-
合法的IP地址为:
a、b、c、d都是0-255的整数。
总结:这个一開始没有做出来。一直在string上思考,c++上做,原来用c的scanf读取。一下就好了,被秒了。
#include<stdio.h>
int main(){
int n;
while(~scanf("%d",&n) && (n>=1 && n<=500)){
int num[4];
while(n--){
bool flag = true;
scanf("%d.%d.%d.%d",&num[0],&num[1],&num[2],&num[3]);
for(int i=0;i<4;i++){
if(!(num[i]>=0 && num[i]<=255)){
flag = false;
break;
}
}
if(flag){
printf("Yes!\n");
}else{
printf("No!\n");
}
}
}
return 0;
}