华中科技大学_2006保研___考研计算机_复试上机

本文介绍了两种常见的编程问题:数组排序及IP地址验证。通过示例代码详细解释了冒泡排序和快速排序的方法,并提供了一个简单有效的IP地址合法性验证程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,排序

题目描述:

    对输入的n个数进行排序并输出。

输入:

    输入的第一行包括一个整数n(1<=n<=100)。
    接下来的一行包括n个整数。

输出:

    可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
    每组测试数据的结果占一行。

样例输入:
4
1 4 3 2
样例输出:
1 2 3 4 
总结:这个题目太简单了,实在想不到保研会考这种题目,当然我用的也是最简单的冒泡排序,而且还是没优化的,shame。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. int main(){  
  5.     int n,i,j;  
  6.     int swap;  
  7.     int arr[101];  
  8.   
  9.     while(cin>>n){  
  10.         for(i=0;i<n;i++){  
  11.             cin>>arr[i];  
  12.         }  
  13.           
  14.         for(i=0;i<n;i++){  
  15.             for(j=0;j<n-1-i;j++){  
  16.                 if(arr[j] > arr[j+1]){  
  17.                     swap=arr[j];  
  18.                     arr[j]=arr[j+1];  
  19.                     arr[j+1]=swap;  
  20.                 }  
  21.             }  
  22.         }  
  23.           
  24.         for(i=0;i<n;i++){  
  25.             cout<<arr[i]<<" ";  
  26.         }  
  27.         cout<<endl;  
  28.     }  
  29.   
  30.     return 0;  
  31. }  

总结:感觉没什么,快速排序还是有些难度,但是掌握一前一后两个指针之后,也没什么。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. //快速排序的划分  
  5. int partion_arr(int arr[],int i,int j){  
  6.     int x=arr[i];  
  7.   
  8.     while(i<j){  
  9.         while(i<j && x <= arr[j]){  
  10.             j--;  
  11.         }  
  12.         if(i<j){  
  13.             arr[i]=arr[j];  
  14.             i++;  
  15.         }  
  16.   
  17.         while(i<j && x >= arr[i]){  
  18.             i++;  
  19.         }  
  20.         if(i<j){  
  21.             arr[j]=arr[i];  
  22.             j--;  
  23.         }  
  24.     }  
  25.   
  26.     arr[i] = x;  
  27.     return i;  
  28. }  
  29.   
  30. //快速排序  
  31. void quick_sort(int arr[],int i,int j){  
  32.     if(i<j){  
  33.         int a = partion_arr(arr,i,j);  
  34.         quick_sort(arr,a+1,j);  
  35.         quick_sort(arr,i,a-1);  
  36.     }  
  37. }  
  38.   
  39. int main(){  
  40.     int n,i;  
  41.     int arr[101];  
  42.   
  43.     while(cin>>n){  
  44.         for(i=0;i<n;i++){  
  45.             cin>>arr[i];  
  46.         }  
  47.           
  48.         quick_sort(arr,0,n-1);  
  49.           
  50.         for(i=0;i<n;i++){  
  51.             cout<<arr[i]<<" ";  
  52.         }  
  53.         cout<<endl;  
  54.     }  
  55.   
  56.     return 0;  
  57. }  


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读取,一下就好了,被秒了。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include<stdio.h>  
  2.   
  3. int main(){  
  4.     int n;  
  5.     while(~scanf("%d",&n) && (n>=1 && n<=500)){  
  6.         int num[4];  
  7.         while(n--){  
  8.             bool flag = true;  
  9.             scanf("%d.%d.%d.%d",&num[0],&num[1],&num[2],&num[3]);  
  10.               
  11.             for(int i=0;i<4;i++){  
  12.                 if(!(num[i]>=0 && num[i]<=255)){  
  13.                     flag = false;  
  14.                     break;  
  15.                 }  
  16.             }  
  17.   
  18.             if(flag){  
  19.                 printf("Yes!\n");  
  20.             }else{  
  21.                 printf("No!\n");  
  22.             }  
  23.         }  
  24.       
  25.     }  
  26.       
  27.   
  28.     return 0;  
  29. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值