計算機程式設計實訓記錄(3)

2022-08-26 04:06:07 字數 2891 閱讀 9473

解決完了例題後,就是10道oj題,挑一些我認為值得研究的題目記錄一下吧

8 乘方計算

問題描述    給定乙個unsigned long long型資料$x$,計算$x^2, x^3,\cdots$直到$x^5$或溢位為止。

輸入    輸入資料有若干行。每行上有乙個unsigned long long型整數,對應一種情形。

輸出    對於每一種情形,依次輸出$x, x^2, x^3, x^4, x^5$的值,不輸出計算溢位的數值。資料項之間用逗號、空格分隔。

輸入樣例

1111

11111

111111

輸出樣例

1111, 1234321, 1371330631, 1523548331041, 1692662195786551

11111, 123454321, 1371700960631, 15240969373571041

111111, 12345654321, 1371737997260631

【提示】在標頭檔案climits(或limits.h)中巨集定義了一些名稱,用以表示一些資料型別取值的最大值。但不同的編譯系統中巨集定義的識別符號為不盡一致。例如:有的用ulong_long_max,而有的用ullong_max。可以採用如下辦法在程式中統一使用ulong_long_max。

#include 

#ifndef  long_long_max

#define  long_long_max  llong_max

#define  ulong_long_max  ullong_max

#endif

計算本身並不困難,難點在於如何判斷溢位,直接比較大小顯然是不可能的,因為在比較的時候就已經溢位了。

# include# include

intmain()

}return0;

}

11 兌換錢幣

問題描述    對於給定的人民幣金額n(分),問有多少種方案將其兌換成1分、2分、5分。

輸入    輸入資料有若干行。每行上有乙個正整數表示以分為單位的人民幣金額n,對應一種情形。

輸出    對於每一種情形,輸出結果、換行。

輸入樣例

10100

150輸出樣例

10541

1186

這道題的解決思路不難想,直接使用窮舉法是可以解決的。

#includeint

main()

printf(

"%.0lf\n

",k);

k=0; }

return0;

}

但是使用了三重迴圈來窮舉會造成乙個問題,就是執行時間過長,導致在學校oj系統中tle。

經過我們的觀察不難發現,最後一次迴圈完全是多餘的,只要配湊出5分和2分的數目,就可以解決這個問題。

#includeint

main()

printf(

"%.0lf\n

",k);

k=0; }

return0;

}

而經過我優秀的同學們的討論,也有不用窮舉的辦法。

因為確定了5分的錢數後,就只剩下2分和1分錢幣的組合,而2分錢幣可以轉化為2個1分錢幣,就是另一種組合

如假設共16分,在只有1個五分的情況下,就可以拆成

11=2+2+2+2+2+1

11=2+2+2+2+1+1+1

顯然,11可以拆成5個2加1個1,就有5+1=6種組合

這樣,這個問題就變成了在5分錢確定的情況下,求剩下可拆成最多幾個2分錢的問題

#includeint

main()

printf(

"%d\n

",l);

}return0;

}

13 指示燈控制

問題描述    有m(m<100)盞燈排成一排(從1到m按順序依次編號)。燈的開關均為點觸式的(即點一次開、再點一次則關)。現有n個人(從1到n依次編號)。第乙個人(1號)將燈全部關閉。第二個人(2號)將所有2的倍數編號的燈的開關點一下。第三個人(3號)將所有3的倍數編號的燈的開關點一下。依此類推,當n個人完成其操作後,計算燈亮的數目。

輸入    輸入資料有若干行。每行上有兩個非負整數對應一種情形的m和n。

輸出    對於每一種情形,輸出計算結果、換行。

輸入樣例

7 73 4

6 4輸出樣例52

2

非常有趣的題目,我自己的思路比較複雜。

首先,用乙個陣列來記錄燈的開關情況,0為滅燈,1為亮燈,用乙個函式來執行第n個人開關燈的過程,再用另乙個函式來統計最後亮著的燈的數目。

開關燈的過程

int *light (int *num,int n,int

m) }}

return

num;

}

統計亮著的燈

int lcount(int *num,int

m)

最後的完整**,可以看到主函式裡面還用了乙個迴圈

#include int *light (int *num,int n,int

m) }}

return

num;

}int lcount(int *num,int

m)int

main()

return0;

}

關於oj題就暫且告一段落,下面將會記錄排序演算法和字串處理的內容。

計算機程式設計實訓記錄(6)

要求完成 4 個函式的設計,包括函式原型設計 函式定義 測試 中函式呼叫。請思考 swap1 函式 和 swap2 或 swap3 函式應用場合能否互換,其原因是什麼。要求函式原型設計時盡量做到精準。雖然這麼說但是要求在 啊 在翻了翻檔案後,還是找到了。char array1 10 tom arra...

計算機程式設計實訓記錄(2)

終於把題做完了,結果發現事情還是不少,但還是抽點時間記錄一下。問題描述給定若干個 大於0且不超過1024 實數,計算其中資料的個數 n 最小值 最大值,以及 平均值 此處的 平均值 定義為,若n 2,則需去掉乙個最大值 乙個最小值,剩下的n 2個資料的算術平均值 若n為1或2,則為普通的算術平均值。...

3dCG 期中創新實訓記錄

本次記錄主要內容為 第三週完成的主要工作 第一輪場景材質和燈光布置渲染 第四周的主要工作 動作捕捉 3 4周,也就是四月初我們的三維製作團隊主要進行專案的中期階段。我們完成的任務有兩個主要場景的白模附上材質和顏色,擺放燈光,以及動作設計與彩排,實際運用光學動作捕捉裝置捕捉。我完成的主要任務為 1 單...