93 隱藏口令**:問題描述 :
有時候程式設計師有很奇怪的方法來隱藏他們的口令。
billy"hacker"geits會選擇乙個字串s(由l個小寫字母組成,5<=l<=100,000),然後他把s順時針繞成乙個圈。
如字串cbadfa,繞成乙個圈後,我們認為字串首尾相連。
每次取其中乙個字母作為起始字母,並順時針依次取字母而組成乙個字串。這樣將得到一些字串。
比如字串cbadfa,按照以上規則取出的字串有:
cbadfa badfac adfacb dfacba facbad acbadf
我們找到最小的那個字串,可知為acbadf,也可知道它的第乙個字元』a』在原字串cbadfa中為第6個字元(位置從1開始),
將得到的結果6減1得到5,這就是我們需要的口令。
再比如字串alabala,繞成乙個圈後,每次取其中乙個字母作為起始字母,並順時針依次取字母而組成乙個字串。這樣將得到一些字串:
alabala labalaa abalaal balaala alaalab laalaba aalabal
我們找到最小的那個字串,可知為aalabal,它的第乙個字母』a』在原字串中位置為7,7-1=6,則6為口令。
注:如果按照規則有兩個字串都是最小的,則取前面那乙個。 輸入說明 :
第一行:乙個數l
第二行及之後:字串s。
注意:字串s可跨多行,但其中的』\n』不算成s中的字元 輸出說明 :
一行,為得到的口令。
無多餘空格或空行。 輸入範例 : 6 cbadfa 輸出範例 : 5
/*
t93 隱藏口令
*/#include
#include
#define max_size 100005
intmain()
oristr[i]
='\0'
;for
(i =
0; i < l; i++
) str[k]
='\0';if
(strcmp
(str, minstr)==-
1)}printf
("%d\n"
, minindex)
;return0;
}
我的思想是暴力破解,比較low
看了位大佬寫的,沒想到還能這麼解決,於是修改了下**:
/*
t93 隱藏口令
演算法概述:假設第i個位置往後取l個能達到最小。
再引入兩個變數j, k,j用於和i取到的相比較,k表示當前已經取了k個字母。
初始時i=0, j=1, k=0;根據比較的大小更新i,j,k的值,當k達到l的時候說明
比較完畢,此時輸出i和j中較小的那個
*/#include
#include
#define max_size 100005
intmain()
oristr[i]
='\0'
; i =
0, j =1;
while
(i < l && j < l && k < l)
else
if(i == j)
}printf
("%d\n"
, i < j ? i : j)
;return0;
}
參考了大佬
從這個題我學到了:
東華oj 高階題第11題
11 abc數字 問題描述 明明的爸爸是一位著名的數學家同時也是一位著名的數學啟蒙老師。他經常出一些簡單而有趣的數學題目來給剛剛接觸數學的小朋友做,培養他們對數學的興趣。一天,明明的爸爸想到了這樣乙個題目。如果有a b c三個1位的正整數,那麼按以下的方法構成2個三位數 第一種方法是a為百位,b為十...
東華oj 高階題第21題
21 回文質數 問題描述 因為151既是乙個質數又是乙個回文數 從左到右和從右到左是看一樣的 所以 151 號是回文質數。寫乙個程式來找出範圍 a,b 5 a b 100,000 間的所有回文質數 輸入說明 僅 1 行 二個整數 a 和 b 5 a b 100,000 輸出說明 輸出乙個回文質數的列...
東華oj 高階題第31題
31 最高頻率 問題描述 明明的爸爸是一位著名的數學家。他在明明很小的時候就發現明明有過人的數學天賦,因此有意培養他對數學的興趣。一次,明明的爸爸和明明玩起了乙個數字遊戲,這個遊戲的名字叫 最高頻率 在遊戲中,明明的爸爸要求明明在一串數字中,找出出現次數最多的那個數字,如果有多個數字出現的次數一樣,...