測試 11月9日的測試

2022-07-21 00:15:16 字數 2761 閱讀 5165

整體分析

1(集合刪數)

題目大意

問題描述:

乙個集合有如下元素:1是集合元素;若p是集合的元素,則2 * p +1,4*p+5也是集合的元素,取出此集合中最小的k個元素,按從小到大的順序組合成乙個多位數,現要求從中刪除m個數字上的數字,使得剩下的數字最大,程式設計輸出刪除前和刪除後的多位數字。

注:不存在所有數被刪除的情況`

輸入格式:

輸入的僅一行,k,m的值,k,m均小於等於30000。

輸出格式:

輸出為兩行,第一行為刪除前的數字,第二行為刪除後的數字。

樣例輸入:

5 4樣例輸出:

用到的資料結構,演算法

貪心,字串處理,打表一類的……

正確分析

首先要產生這個集合,可以打表,也可以先有現用的陣列裡的數字產生。每次的元素只有可能有已有的元素通過兩種運算產生,所以我們每次產生兩個元素,取其小者即可。接下來就是貪心策略的使用了,顯然要去找比較大的元素,那麼我們為了滿足刪除一部分數之後,剩下的數能滿足要求,那麼每個數的取值是被限制在產生的數的乙個確定的區間中的。每次在選取乙個數後,我們就將區間起點移動到這個數的位置,區間的尾端只和選取的數的個數有關。那麼通過n-m次的選取,我們就會得到乙個最大值

錯誤原因

打表時出現錯誤。打的表不夠大,沒有選取目標元素。

貪心策略不是很優秀,效率較低。

反思在打表時,有的時候要涉及到排序 ,那麼就需要將打表的範圍擴大到要求的範圍之外,然後再選取需要的元素。

貪心策略就是一種積累,既然貪心,就要追求高效

var

biao:array[0..600000] of longint;

s,numb:ansistring;

n,i,last,k,m,j,a,b,l,w,t:longint;

max:char;

function min(a,b:longint):longint;

begin

if amax then

begin

max:=s[i];

w:=i;

end;

write(max);

end;

close(input);

close(output);

end.

2(durle)

題目大意

對任意給定的m(m∈n+)和n(n∈n+),滿足m1,使得k´a∈p,則修改p為:p=p- ,並稱該d規則具有分值a。現要求編制乙個程式,對輸入的m,n值,構造相應的初始集合p,對p每應用一次d規則就累加其相應的分值,求能得到最大累加分值的d規則序列,輸出每次使用d規則時的分值和集合p的變化過程。

輸入格式:

輸入僅一行,m,n的值。

輸出格式:

輸出每次使用d規則時的分值和集合p的變化過程(即變化後的集合內所有的數,每個數用空格隔開),注意d後面有個空格,冒號後面有個空格。如果沒有一次可以變化就輸出0。

樣例輸入:

(1)1 10

(2)56 57

樣例輸出:

(1)5 : 1 2 3 4 6 7 8 9

4 : 1 2 3 6 7 9

2 : 1 3 7 9

3 : 1 7

1 :(2)

用到的資料結構,演算法

模擬,貪心

正確分析

正確分析題目要求和樣例,我們知道,對於給定的乙個區間裡的數,如果存在乙個數是另外幾個數的約數,我們就繼續進行操作。那麼如過乙個數擁有的倍數的個數和另乙個數相同,那麼我們選擇較大的那個元素。如果倍數的個數不同,那麼我們選擇倍數個數較少的元素。

錯誤原因

沒有選擇正確的貪心策略,沒有正確的理解題意

反思仔細分析題意根據題目的資訊,來推導演算法,有的時候,找不到合適的演算法就按照題目的要求模擬就可以。

program liukee;

var a:array[0..100] of longint;

f:array[0..100] of longint;

m,n,i,sum,min,j,k:longint;

flag:boolean;

begin

assign(input,'drule.in');

reset(input);

assign(output,'drule.out');

rewrite(output);

readln(m,n);

if n=m+1 then

begin

writeln(0);

close(input);

close(output);

halt;

end;

for i:=m to n do

f[i]:=true;

flag:=false;

sum:=n-m+1;

while sum>0 do

begin

fillchar(a,sizeof(a),0);

min:=maxlongint;

for i:=m to n do

if f[i] then

for j:=m to n do

if f[j] then

if (i<>j)and(j mod i=0) then

inc(a[i]);

for i:=n downto m do

if (a[i]<>0)and(a[i]

日誌11月9日

今天學習訪問屬性 完整例項 例項class employee 所有員工的基類 empcount 0def init self,name,salary self.name name self.salary salary employee.empcount 1def displaycount self ...

9月11日培訓日記

1.講解了mysql的安裝,對安裝介面提示資訊進行了解釋,例如,資料庫伺服器程式與客戶端程式的工作關係,資料庫伺服器程式與資料庫空間的關係,mysql innodb和myisam儲存引擎的區別,事務的概念 一些過程要能同生同死,針對我們的專案,用到事務?發license和扣減貨幣 olap與oltp...

9月11日培訓日記

1.講解了mysql的安裝,對安裝介面提示資訊進行了解釋,例如,資料庫伺服器程式與客戶端程式的工作關係,資料庫伺服器程式與資料庫空間的關係,mysql innodb和myisam儲存引擎的區別,事務的概念 一些過程要能同生同死,針對我們的專案,用到事務?發license和扣減貨幣 olap與oltp...