1,排序
-
题目描述:
-
对输入的n个数进行排序并输出。
-
输入:
-
输入的第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
-
输出:
-
可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
每组测试数据的结果占一行。
-
样例输入:
-
4 1 4 3 2
-
样例输出:
-
1 2 3 4
#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的整数。
#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;
}