传说中的数据结构
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description

  在大学里学习了一个学期了,大家大都对所学的专业有了基本的了解。许多同学也已经知道了到大二要开一门课叫做《数据结构》,那么今天给你们提前讲一下一个最简单的数据结构:栈。 栈的基本操作有3种:push,pop,top。

例如,给你一个数列:1 2 3 4
push:向栈中加入一个数,比如push 5,数列就变成1 2 3 4 5。
pop:从栈中删除最后面的数,比如 pop,数列就变成1 2 3。(数列变化,但是不输出。如果栈是空的,即不能 pop 操作,那就输出 error ,但是接下来的操作还是要继续的)。
top:找出栈最后面的数,比如 top ,你就要输出4。(如果栈中没有数的话,即不能 top 操作,那就输出 empty)。
然后,你们可以看出来了吧,其实栈就是一个先进后出(越先进去的元素越后面出来)的数据结构,很简单吧,下面要检验下你们的学习效果了。
Input

输入包含多组测试数据.
每组数据的第一行为一个整数 T(1 <= T <= 1000 ),接下来 T 行为对栈的操作。
Output

如果操作是top,那么输出最后面的数,如果栈中没有数的话,那就输出“empty”(不含引号)。
如果操作是pop且栈是空的,那么输出 “error”(不含引号)。
在每组测试数据的最后多加一次换行。
Sample Input

8
push 1
push 2
push 3
push 4
top
pop
top
pop
3
push 1
pop
top
Sample Output

4
3

empty

import java.util.Scanner;

public class Main
{

	public static void main(String[] args)
	{
		 Scanner reader=new Scanner(System.in);
         int A[]=new int [10001];
           String S;
         while(reader.hasNext())
         {
        	 int T=reader.nextInt();
        	 int p=0;
        	 for(int i=0;i<T;i++)
        	 {
        		S=reader.next();
        		if(S.equals("push"))
        		{
        			p++;
        			A[p]=reader.nextInt();
        		}
        		else if(S.equals("pop"))
        		{
        			if(p==0)
        			{
        				System.out.println("error");
        			}
        			else
        			{
        			      p--;
        			}
        		}
        		else if(S.equals("top"))
        		{
        			if(p==0)
        			{
        				System.out.println("empty");
        			}
        			else	
        			{
        				System.out.println(A[p]);
        			}
        		}
        	 }
        	 System.out.println();
         }
         
       reader.close();  
	}

}


小鑫の日常系列故事(十)——排名次
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description

小鑫在来到SDUT之后,经过十分刻苦的学习和努力终于进入了ACM集训队。很快又一次ACM集训队的选拔就要开始了,集训队员们又忙碌了起来。他也十分幸运的被学长抓来当苦力。 o(∩_∩)o
这次学长给他分配的任务是写一个自动排名的程序,我们知道当选拔赛结束的时候,每一个参与选拔的同学都会有一个自己的分数。而集训队需要根据大家的分数排名来决定谁能够进入集训队,这个任务就落在了小鑫身上。
你能帮小鑫来完成这个程序么?
Input

输入的第一行为n 0<n<=50;
下面还有n行每行为一个人名和ta所得到的分数。保证没有相同的分数。
人名为英文单词,长度不超过10。
Output

输出为n行,每行一个人名与他的得分。每一行最后没有多余的空格。
具体输出格式见样例。
Sample Input

3
Dan 10
John 50
Danny 30
Sample Output

John 50
Danny 30
Dan 10

import java.util.Scanner;

public class Main
{
    public static void main(String[] args) 
    {
         Scanner reader = new Scanner(System.in);
           int n=reader.nextInt();
           String S[]=new String[100];
           int A[]=new int [100];
           for(int i=1;i<=n;i++)
           {
        	   S[i]=reader.next();
        	   A[i]=reader.nextInt();
           }
           int t;String p;
           for(int i=1;i<=n-1;i++)
           {
        	   for(int j=1;j<=n-i;j++)
        	   {
        		   if(A[j]<A[j+1])
        		   {
        			   t=A[j];A[j]=A[j+1];A[j+1]=t;
        			   p=S[j];S[j]=S[j+1];S[j+1]=p;
        		   }
        	   }
           }
           for(int i=1;i<=n;i++)
           {
        	   System.out.print(S[i]+" ");
        	   System.out.println(A[i]);
           }
       reader.close();
    }
}

C语言实验——打印金字塔
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description

输入n值,打印下列形状的金字塔,其中n代表金字塔的层数。

Input

输入只有一个正整数n。
Output

打印金字塔图形,其中每个数字之间有一个空格。
Sample Input

3
Sample Output

1

1 2 1
1 2 3 2 1

import java.util.Scanner;

public class Main
{
    public static void main(String[] args) 
    {
         Scanner reader = new Scanner(System.in);
           int n=reader.nextInt();
           for(int i=1;i<=n;i++)
           {
        	   for(int j=1;j<=2*(n-i);j++)
        	   {
        		   System.out.print(" ");
        	   }
        	   if(i==1)
        	   {
        		   System.out.println(i);
        	   }
        	   else
        	   {
        		   for(int j=1;j<=i;j++)
        		   {
        			   if(j==i)
        			   {
        				   System.out.print(i);
        			   }
        			   else
        			   {
        				   System.out.print(j+" ");
        			   }
        		   }
        		   for(int j=i-1;j>=1;j--)
        		   {
        			   if(j==1)
        			   {
        				   System.out.println(" "+j);
        			   }
        			   else
        			   {
        				   System.out.print(" "+j);
        			   }
        		   }
        	   }
           }
       reader.close();
    }
}




猜糖块
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description

  小狗对小猫说:你猜猜我的口袋里有几块糖?小猫说:猜对了你给我吃吗?小狗点点头:嗯,猜对了两块都给你!小猫咽了咽口水说:我猜五块!然后,小狗笑着把糖放到小猫手里,说:我还欠你三块。
  既然小猫这么喜欢吃糖,小狗决定每天都给小猫几块糖,但是呢,不能每天都给相同块数的糖,那样就太单调了。于是,第一天小狗给小猫1*1=1块,第二天2*2=4块……第 n 天给的糖数为 n*n 。现在已知小狗家共有 N 块糖,你需要帮他计算下这些糖最多可以给小猫几天?

Input

输入只有一个整数 N (1 <= N <= 10000)。
Output

输出对应的天数。
Sample Input

15
Sample Output

3

import java.util.Scanner;

public class Main
{
    public static void main(String[] args) 
    {
         Scanner reader = new Scanner(System.in);
           int N=reader.nextInt();
           int i;
           for(i=1;i<=N;i++)
           {
        	   N=N-i*i;
        	   if(N<0)
        	   {
        		   break;
        	   }
           }
           System.out.println(i-1);
       reader.close();
    }
}




完美的素数
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic
Problem Description

  素数又称质数。指一个大于1的自然数,除了1和此整数自身外,不能被其他自然数整除的数。我们定义:如果一个素数是完美的素数,当且仅当它的每一位数字之和也是一个素数。现在给你一个正整数,你需要写个程序判断一下这个数按照上面的定义是不是一个完美的素数。

Input

输入包含多组测试数据。
每组测试数据只包含一个正整数 n (1 < n <= 10^6)。
Output

对于每组测试数据,如果 n 是完美的素数,输出“YES”,否则输出“NO”(输出均不含引号)。
Sample Input

11
13
Sample Output

YES
NO

import java.util.Scanner;

public class Main
{
    public static void main(String[] args) 
    {
         Scanner reader = new Scanner(System.in);
           while(reader.hasNext())
           {
        	   int n=reader.nextInt();
        	   if(n==2)
        	   {
        		   System.out.println("YES");
        	   }
        	   else
        	   {
        		   int i;
        		   for(i=2;i<=n-1;i++)
        		   {
        			   if(n%i==0)
        			   {
        				   System.out.println("NO");
        				   break;
        			   }
        		   }
        		   if(i==n)
        		   {
        			   int sum=0;
        			   for(int j=1;j<=7;j++)
        			   {
        				   sum=sum+(n%10);
        				   n=n/10;
        			   }
        			   int j;
        			   for( j=2;j<=sum-1;j++)
        			   {
        				  if(sum%j==0)
        				  {
        					  System.out.println("NO");
        					  break;
        				  }
        			   }
        			   if(j==sum)
        			   {
        				   System.out.println("YES");
        			   }
        		   }
        	   }
           }
       reader.close();
    }
}