首页 > 专题系列 > Java解POJ > POJ 2271 HTML [解题报告] Java
2013
11-11

POJ 2271 HTML [解题报告] Java

HTML

问题描述 :

If you ever tried to read a html document on a Macintosh, you know how hard it is if no Netscape is installed.

Now, who can forget to install a HTML browser? This is very easy because most of the times you don’t need one on a MAC because there is a Acrobate Reader which is native to MAC. But if you ever need one, what do you do?

Your task is to write a small html-browser. It should only display the content of the input-file and knows only the html commands (tags) <br> which is a linebreak and <hr> which is a horizontal ruler. Then you should treat all tabulators, spaces and newlines as one space and display the resulting text with no more than 80 characters on a line.

输入:

The input consists of a text you should display. This text consists of words and HTML tags separated by one or more spaces, tabulators or newlines.

A word is a sequence of letters, numbers and punctuation. For example, “abc,123″ is one word, but “abc, 123″ are two words, namely “abc,” and “123″. A word is always shorter than 81 characters and does not contain any ‘<' or '>‘. All HTML tags are either <br> or <hr>.

输出:

You should display the the resulting text using this rules:

If you read a word in the input and the resulting line does not get longer than 80 chars, print it, else print it on a new line.

If you read a <br> in the input, start a new line.

If you read a <hr> in the input, start a new line unless you already are at the beginning of a line, display 80 characters of ‘-’ and start a new line (again).

The last line is ended by a newline character.

样例输入:

Hallo, dies ist eine 
ziemlich lange Zeile, die in Html
aber nicht umgebrochen wird.
<br>
Zwei <br> <br> produzieren zwei Newlines. 
Es gibt auch noch das tag <hr> was einen Trenner darstellt.
Zwei <hr> <hr> produzieren zwei Horizontal Rulers.
Achtung       mehrere Leerzeichen irritieren

Html genauso wenig wie


mehrere Leerzeilen.

样例输出:

Hallo, dies ist eine ziemlich lange Zeile, die in Html aber nicht umgebrochen
wird.
Zwei

produzieren zwei Newlines. Es gibt auch noch das tag
--------------------------------------------------------------------------------
was einen Trenner darstellt. Zwei
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
produzieren zwei Horizontal Rulers. Achtung mehrere Leerzeichen irritieren Html
genauso wenig wie mehrere Leerzeilen.

解题代码:

//* @author 
//2271
import java.util.Scanner;
import java.util.StringTokenizer;
import java.io.*;
public class Main {
 public static void main(String args[]){   
     String str1="";
        Scanner scan=new Scanner(System.in);
        String s2="";
        while(scan.hasNext()){
         String str=scan.nextLine();
               if(str=="") break;
         StringTokenizer s=new StringTokenizer(str);
         while(s.hasMoreTokens()){          
           String str2=(String)s.nextElement();
           if(str2.equals("< br>")){
            s2+=str1;
                  s2+='\n';
            str1="";
           }
           else if(str2.equals("< hr>")){
            if(str1!="") { s2+=str1;
                                s2+='\n';
                  }
            s2+="--------------------------------------------------------------------------------\n";
            str1="";
           }
           else{
            String s1="";
            if(str1!="") s1=str1+" "+str2;
            else s1=str2;
            if(s1.length()<=80){
              str1=s1;
            }
            else{
             s2+=str1;
             s2+='\n';
             str1=str2;
            }
           }
         }
         
         
        }   
        
        if(str1!=null){ 
         System.out.print(s2);
         System.out.println(str1);
       }
        else {
         System.out.println(s2);
        }
         
   }
}

  1. #include <stdio.h>
    int main()
    {
    int n,p,t[100]={1};
    for(int i=1;i<100;i++)
    t =i;
    while(scanf("%d",&n)&&n!=0){
    if(n==1)
    printf("Printing order for 1 pages:nSheet 1, front: Blank, 1n");
    else {
    if(n%4) p=n/4+1;
    else p=n/4;
    int q=4*p;
    printf("Printing order for %d pages:n",n);
    for(int i=0;i<p;i++){
    printf("Sheet %d, front: ",i+1);
    if(q>n) {printf("Blank, %dn",t[2*i+1]);}
    else {printf("%d, %dn",q,t[2*i+1]);}
    q–;//打印表前
    printf("Sheet %d, back : ",i+1);
    if(q>n) {printf("%d, Blankn",t[2*i+2]);}
    else {printf("%d, %dn",t[2*i+2],q);}
    q–;//打印表后
    }
    }
    }
    return 0;
    }