暑期天天練(一)

2022-05-13 16:17:57 字數 1934 閱讀 5293

一。模擬

題意是給n個操作,乙個初始值x,操作包括對這個x加乙個數或減去乙個數,輸出x最終值,和不能執行減操作的次數。

注意當輸入乙個字元時,要用getchar把輸入緩衝區裡的'\n'吃掉。

#include using

namespace

std;

typedef

long

long

ll;int

n;ll x;

intmain()

getchar();

}printf(

"%i64d %d\n

",x,cnt);

}

view code

二。排序,構造

題意是給乙個無序的陣列,請構造出乙個操作序列,把這個陣列變為單調不降的,每一步操作是:對於【l,r】依次交換a[l]和a[l+1],a[l+2]和a[l+3].....

這個題目很簡單其實,要把陣列變有序,那麼對於每乙個數字,他都有乙個最終的位置,只要把原來陣列中的數字挪到正確的位置上就可以了,所以,問題

轉化為,把乙個數從i,挪到j要幾步?(i <= j),顯然應該把i和它右邊的數互換,再和更右邊的數互換,其實相當於把a[i+1]~a[j]整體左移,再把a[i]放到

j上就可以了。這裡要注意從大的數字開始挪動,只要大的數確定了位置,那麼小的數一定是在他左邊挪動的。memmove函式很好用,比用for效率高。

#include using

namespace

std;

typedef

long

long

ll;const

int maxn =1e4;

intn;

inta[maxn],b[maxn];

void output(int l, intr)}

intmain()

sort(b,b+n);

for(int i = n-1; i >= 0; --i)

}

view code

三。dfs,回溯,數字統計

這個題看起來很煩,因為要考慮的邊界條件比較多。

#include using

namespace

std;

typedef

long

long

ll;const

int maxn =1e4;

const

intbase = 7

;int n,m,mx[maxn],vis[10

],len,midlen;

/*用陣列表示示數的每一位,整個陣列分成兩半,一半是minute,一半是seconds。minute那半,長度是midlen,總共長度是len*/

/*mx陣列表示能用這個陣列表示的數的上限,即0-midlen-1表示的是7進製的(n-1),midlen~len表示的是7進製的(m-1)*/

void

init()//把n,m轉化成7進製

/*這個dfs就是從第0位開始,如果高位一直是mx[p]的話,顯然p+1位上最大值是mx[p+1],而如果高位是小於mx[p],p+1位上最大值是base-1*/

/*就好比最大是360,第一位是3的話,第二位最大是6,而第一位是2的話,最高位卻可以是9。。。。。特別無聊*/

/*回溯就是面臨多種決策的時候,先選一種操作,更新,等計算完,把更新的東西復原,再選下一種操作,這樣每種操作之間都是互不影響的*/

int dfs(int p,int flag)

else

sum += dfs(p+1,1

); vis[x] = 0

; }

}else}}

}else}}

return

sum;

}int

main()

C語言天天練(二) statickeyword

引言 statickeyword不僅能夠修飾變數。並且能夠修飾函式。了解它的使用方法,不僅對閱讀別人的 有幫助,也有助於自己寫出更加健壯的程式。使用方法 用於不同的上下文環境時,statickeyword具有不同的意義。一 當它用於函式定義時,或用於 塊之外的變數宣告時,statickeyword用...

C語言天天練(十) 結構體

引言 資料經常以成組的形式存在。在c中,使用結構可以把不同型別的值存放在一起。結構的宣告有兩種 1 struct 然後用標籤 去宣告結構體變數。2 typedef struct 然後用 去宣告結構體變數。此時 是個型別名,而不像上面的 是個標籤。結構成員可以是標量 陣列 指標甚至是其他結構。結構成員...

C語言天天練(二四) 記憶體分配

引言 對於c語言程式,了解它執行時在記憶體中是怎樣分配的對於我們理解它的執行機制是很實用的。以下就總結一下c語言程式的一些記憶體分配知識。一 一段c程式。編譯連線後形成的可執行檔案一般有 段 資料段 堆和棧等幾部分組成。當中資料段又包含僅僅讀資料段 已初始化的讀寫資料段和未初始化的bss段。例如以下...