首页 > ACM题库 > 九度OJ > 九度-1203-IP地址[解题代码]
2013
12-13

九度-1203-IP地址[解题代码]

题目来源:2006年华中科技大学计算机保研机试真题

题目描述:

    输入一个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的整数。


java 代码如下:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Main {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		Pattern p = Pattern.compile("(\\d{1,3}).(\\d{1,3}).(\\d{1,3}).(\\d{1,3})");
		
		while(s.hasNextInt()){
			int n = s.nextInt();
			for(int i=0; i<n; i++){
				Matcher m = p.matcher(s.next());
				if(m.matches()){
					int flag = 0;
					for(int j=0; j<4; j++){
						String str = m.group(j+1);
						if( Integer.parseInt(str) > 255 || Integer.parseInt(str)<0){
							System.out.println("No!");
							flag = 1;
							break;
						}
					}
					if(flag == 0)
						System.out.println("Yes!");
				}else
					System.out.println("No!");
			}
		}
	}

}

/**************************************************************
	Problem: 1203
	User: coder
	Language: Java
	Result: Accepted
	Time:330 ms
	Memory:19444 kb
****************************************************************/


  1. “再把所有不和该节点相邻的节点着相同的颜色”,程序中没有进行不和该节点相邻的其他节点是否相邻进行判断。再说求出来的也不一样是颜色数最少的

  2. 算法是程序的灵魂,算法分简单和复杂,如果不搞大数据类,程序员了解一下简单点的算法也是可以的,但是会算法的一定要会编程才行,程序员不一定要会算法,利于自己项目需要的可以简单了解。

  3. 换句话说,A[k/2-1]不可能大于两数组合并之后的第k小值,所以我们可以将其抛弃。
    应该是,不可能小于合并后的第K小值吧

  4. 第二个方法挺不错。NewHead代表新的头节点,通过递归找到最后一个节点之后,就把这个节点赋给NewHead,然后一直返回返回,中途这个值是没有变化的,一边返回一边把相应的指针方向颠倒,最后结束时返回新的头节点到主函数。