2016藍橋杯C組決賽java
平方末尾
能夠表示為某個整數的平方的數字稱為“平方數”
比如,25,64
雖然無法立即說出某個數是平方數,但經常可以斷定某個數不是平方數。
因為平方數的末位只可能是:[0, 1, 4, 5, 6, 9] 這6個數字中的某個。
所以,4325435332必然不是平方數。
如果給你一個2位或2位以上的數字,你能根據末位的兩位來斷定它不是平方數嗎?
請計算一下,一個2位以上的平方數的最后兩位有多少種可能性?
注意:需要提交的是一個整數,表示2位以上的平方數最后兩位的不同情況數。
不要填寫任何多余內容(比如,說明解釋文字等)
import java.util.HashSet;
import java.util.Set;
public class A {
public static void main(String[] args){
Set<String> set = new HashSet<>();
//2位以上的平方數 最小因子是10
for(long i=10;i<10000;i++){
String str = i*i+"";
String l2 = str.substring(str.length()-2);
//每次添加成功,即找到了不一行的可能性 輸出 set 的長度
if(set.add(l2)){
System.out.println(set.size());
}
}
}
}
七星填數
如圖【圖1.png】所示。
在七角星的14個節點上填入1~14 的數字,不重復,不遺漏。
要求每條直線上的四個數字之和必須相等。
圖中已經給出了3個數字。
請計算其它位置要填充的數字,答案唯一。
填好后,請提交綠色節點的4個數字(從左到右,用空格分開)
比如:12 5 4 8
當然,這不是正確的答案。
注意:只提交4個用空格分開的數字,不要填寫任何多余的內容。
全排列問題,1 - 14 個數 除去 14、11、6 去廁所全排列
把原圖加工一下,對應上我的數組
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
public static void main(String args[]){
int[] arr = {1,2,3,4,5,7,8,9,10,12,13};
all(arr,0);
}
static void all(int[] arr,int index){
if(index==arr.length-1){
check(arr);
return;
}
for(int i=index;i<arr.length;i++){
swap(arr,index,i);
all(arr,index+1);
swap(arr,index,i);
}
}
static void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
static void check(int[] arr){
int n1 = arr[0]+ arr[1] + arr[2] + arr[3];
int n2 = arr[0] + arr[4] +arr[5] +arr[6];
if(n1!=n2)return;
int n3 = arr[6] + arr[7] +arr[9] + 11;
if(n3!=n1)return;
int n4 = arr[8] + arr[9] + arr[10] + arr[3];
if(n4!=n1)return;
int n5 = 6 + arr[2] + arr[10] +11;
if(n5!=n1)return;
int n6 = 14 + arr[4] + arr[1] + 6;
if(n6!=n1)return;
int n7 = 14 + arr[5] + arr[7] +arr[8];
if(n7!=n1)return;
//你們都得給我去等于 n1 不然就直接 結束函數
System.out.println(arr[0]+" " +arr[1] +" " + arr[2] + " " +arr[3]);
}
}
打印數字
小明寫了一個有趣的程序,給定一串數字。
它可以輸出這串數字拼出放大的自己的樣子。
比如“2016”會輸出為:
22222 00000 1 6666
2 2 0 0 1 1 6
2 0 0 1 666666
2 0 0 1 6 6
2 0 0 1 6 6
2 2 0 0 1 6 6
2222222 00000 1111 66666
請仔細分析代碼,填寫劃線部分缺少的內容。
public class Main
{
static void f(int n)
{
String[][] di =
{{" 00000 ",
"0 0",
"0 0",
"0 0",
"0 0",
"0 0",
" 00000 "},
{" 1 ",
" 1 1 ",
" 1 ",
" 1 ",
" 1 ",
" 1 ",
" 1111"},
{" 22222 ",
"2 2",
" 2",
" 2 ",
" 2 ",
" 2 2",
"2222222"},
{" 33333 ",
"3 3",
" 3",
" 3333 ",
" 3",
"3 3",
" 33333 "},
{" 44 ",
" 4 4 ",
" 4 4 ",
"4 4 ",
"4 4 ",
"4444444",
" 4 "},
{" 55555 ",
" 5 ",
"555555 ",
" 5",
" 5",
"5 5",
" 55555 "},
{" 6666 ",
"6 ",
"666666 ",
"6 6",
"6 6",
"6 6",
" 66666 "},
{"7777777",
"7 7 ",
" 7 ",
" 7 ",
" 7 ",
" 7 ",
" 7 "},
{" 88888 ",
"8 8",
"8 8",
" 88888 ",
"8 8",
"8 8",
" 88888 "},
{" 99999 ",
"9 9",
"9 9",
" 999999",
" 9",
"9 9",
" 99999 "}};
char[] cc = (""+n).toCharArray();
for(int i=0; i<di[0].length; i++){
for(int j=0; j<cc.length; j++){
System.out.print( ____________________ + " "); //填空位置
}
System.out.println();
}
}
public static void main(String[] args)
{
f(2016);
}
}
注意:只提交劃線部分缺少的代碼,不要添加任何題面已有代碼或符號。
也不要提交任何說明解釋文字等。
di[cc[j]-'0'][i]
贏球票
某機構舉辦球票大獎賽。獲獎選手有機會贏得若干張球票。
主持人拿出 N 張卡片(上面寫著 1~N 的數字),打亂順序,排成一個圓圈。
你可以從任意一張卡片開始順時針數數: 1,2,3.....
如果數到的數字剛好和卡片上的數字相同,則把該卡片收入囊中,從下一個卡片重新數數。
直到再無法收獲任何卡片,游戲結束。囊中卡片數字的和就是贏得球票的張數。
比如:
卡片排列是:1 2 3
我們從1號卡開始數,就把1號卡拿走。再從2號卡開始,但數的數字無法與卡片對上,
很快數字越來越大,不可能再拿走卡片了。因此這次我們只贏得了1張球票。
還不算太壞!如果我們開始就傻傻地從2或3號卡片數起,那就一張卡片都拿不到了。
如果運氣好,卡片排列是 2 1 3
那我們可以順利拿到所有的卡片!
本題的目標就是:已知順時針卡片序列。
隨便你從哪里開始數,求最多能贏多少張球票(就是收入囊中的卡片數字之和)
輸入數據:
第一行一個整數N(N<100),表示卡片數目
第二行 N 個整數,表示順時針排列的卡片
輸出數據:
一行,一個整數,表示最好情況下能贏得多少張球票
比如:
用戶輸入:
3
1 2 3
程序應該輸出:
1
比如:
用戶輸入:
3
2 1 3
程序應該輸出:
6
資源約定:
峰值內存消耗 < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。
所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
首先N小于100,直接暴力模擬,模擬每一個開始數數的位置
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
static int n;
public static void main(String args[]){
Scanner input = new Scanner(System.in);
n = input.nextInt();
int[] arr = new int[n];
for(int i=0;i<arr.length;i++){
arr[i] = input.nextInt();
}
int Max = 0;
//從每一個位置開始數數?
for(int i=0;i<n;i++){
Max = Math.max(Max,iter(arr,i));
}
System.out.println(Max);
}
static int iter(int[] arr,int i){
//那些數已經被拿過了
//true 已經拿過了
//false 未拿過
boolean[] bol = new boolean[n];
int num = 0;
//數數
int ss = 1;
while(true){
i = i%n;
//數的數大于了最大數
if(ss>n)break;
//判斷是否我把所有的票取完了
if(check(bol))break;
//已經拿過了就跳過循環
if(bol[i]){
i++;
continue;
}
//數的數和卡片對應
if(ss==arr[i]){
bol[i] = true;
num += arr[i];
ss = 0;
}
ss++;
i++;
}
return num;
}
static boolean check(boolean[] bol){
for (int i = 0; i < bol.length; i++) {
if(bol[i]==false)return false;
}
return true;
}
}
路徑之謎
小明冒充X星球的騎士,進入了一個奇怪的城堡。
城堡里邊什么都沒有,只有方形石頭鋪成的地面。
假設城堡地面是 n x n 個方格。【如圖1.png】所示。
按習俗,騎士要從西北角走到東南角。
可以橫向或縱向移動,但不能斜著走,也不能跳躍。
每走到一個新方格,就要向正北方和正西方各射一箭。
(城堡的西墻和北墻內各有 n 個靶子)
同一個方格只允許經過一次。但不必做完所有的方格。
如果只給出靶子上箭的數目,你能推斷出騎士的行走路線嗎?
有時是可以的,比如圖1.png中的例子。
本題的要求就是已知箭靶數字,求騎士的行走路徑(測試數據保證路徑唯一)
輸入:
第一行一個整數N(0<N<20),表示地面有 N x N 個方格
第二行N個整數,空格分開,表示北邊的箭靶上的數字(自西向東)
第三行N個整數,空格分開,表示西邊的箭靶上的數字(自北向南)
輸出:
一行若干個整數,表示騎士路徑。
為了方便表示,我們約定每個小格子用一個數字代表,從西北角開始編號: 0,1,2,3....
比如,圖1.png中的方塊編號為:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
示例:
用戶輸入:
4
2 4 3 4
4 3 3 3
程序應該輸出:
0 4 5 1 2 3 7 11 10 9 13 14 15
資源約定:
峰值內存消耗 < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。
所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
點擊跳轉到問題詳細解釋
智能推薦
1301: [藍橋杯2016決賽]隨意組合
題意 傳送門 分析 當時想到的就是排列組合,就是從第一組挑一個數,第二組挑一個數。 用的是搜索,而且用了兩個dfs,同時為了避免重復,四個數一定是從大到小排列的。...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
猜你喜歡
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...