2013藍橋杯第五題“錯誤票據”及思路

題目

標題:錯誤票據

某涉密單位下發了某種票據,並要在年終全部收回。
每張票據有唯一的ID號。全年所有票據的ID號是連續的,但ID的開始數碼是隨機選定的。
因爲工作人員疏忽,在錄入ID號的時候發生了一處錯誤,造成了某個ID斷號,另外一個ID重號。
你的任務是通過編程,找出斷號的ID和重號的ID。
假設斷號不可能發生在最大和最小號。

要求程序首先輸入一個整數N(N<100)表示後面數據行數。
接着讀入N行數據。
每行數據長度不等,是用空格分開的若干個(不大於100個)正整數(不大於100000)
每個整數代表一個ID號。

要求程序輸出1行,含兩個整數m n,用空格分隔。
其中,m表示斷號ID,n表示重號ID

例如:
用戶輸入:
2
5 6 8 11 9
10 12 9
則程序輸出:
7 9

再例如:
用戶輸入:
6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
172 189 127 107 112 192 103 131 133 169 158
128 102 110 148 139 157 140 195 197
185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119
則程序輸出:
105 120

資源約定:
峯值內存消耗 < 64M
CPU消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多餘內容。
所有代碼放在同一個源文件中,調試通過後,拷貝提交該源碼。
注意: main函數需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要調用依賴於編譯環境或操作系統的特殊函數。
注意: 所有依賴的函數必須明確地在源文件中 #include <xxx>, 不能通過工程設置而省略常用頭文件。
提交時,注意選擇所期望的編譯器類型。
 

 分析

1.看到題目,想到了排序和遍歷,思路比較見到

2.(重點在於數據處理)數據處理要求先輸入行數,後面纔是數據,對於這種情況,一定要記得 用代碼吃掉行數後面的換行符!!

Scanner sc=new Scanner(System.in);
int N=sc.nextInt();//輸入流中存在換行符
sc.nextLine();//消掉整數後面的換行符(重點)

3.由於數據的多少不確定,所以不能使用數組,使用ArrayList集合.

擴展:ArrayList是集合的一種實現,實現了接口List,List接口繼承了Collection接口。

Collections.sort(list);//排序方法調用Collections.sort()方法

4.再比較兩個集合元素大小時不能用==,要用equals()

 

代碼

package shengsai;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class piaoju07 {
	public static void main(String args[])
	{
		ArrayList<Integer> list =new ArrayList<Integer>();
		Scanner sc=new Scanner(System.in);
		int N=sc.nextInt();//輸入流中存在換行符
		sc.nextLine();//消掉整數後面的換行符(重點)
		
		for(int i=0;i<N;i++)
		{
			String line=sc.nextLine();//字符串型
			String [] split=line.split(" ");
			for(int j=0;j<split.length;j++)
			{
				list.add(Integer.parseInt(split[j]));//字符串轉換爲整型
			}
		}
		
		//System.out.println(list.size());
		  Collections.sort(list);//集合對象排序用Collections
		  int a=0,b=0;
		  for(int i=1;i<list.size();i++)
		  {
			  if(list.get(i)-list.get(i-1)==2)//-重載可以進行  可以減法
				  a=list.get(i)-1;
			  if(list.get(i).equals(list.get(i-1)))//集合對象中取出的對象作比較時應用eqauls
				  b=list.get(i);
		  }
		
		System.out.print(a+" "+ b);
		}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章