本文目錄一覽:
- 1、一個簡單的C語言題目……求大佬解答
- 2、C語言經典題目
- 3、C語言小題目!
- 4、C語言的小題目
一個簡單的C語言題目……求大佬解答
(1)第1行的功能是什麼?
求輸入10進制整數的位數。
(2)在第2行中,main函數前面為什麼有void?
表示該main函數無返回值。
(3)第4行的功能。
定義兩個整型變量。
(4)設輸入整數356,寫出執行該程序的運行結果。
3
C語言經典題目
1.正確的算法:
如果n=3, 過河時間為A+B+C
如果n=2, 好算, 不費口舌了
如果n=4, 這個是重點:
每次優先考慮把最慢兩人送過河
把n人中最快兩人記為A,B, 最慢兩人記為C,D(過河時間ABCD), n人問題實質上轉換為4人過河問題, 參考到4人過河時的優化,
記AB過河, A回, CD過河, B回, 為方法X, 實質是利用最快兩人進行優化, 耗時A+2B+D
記AD過河, A回, AC過河, A回, 為方法y, 實質是利用最快一人來過河, 耗時2A+C+D
每次比較這兩個方法, 如果x快, 使用x方法, 如果y快, 則用y, 並且, 一旦某次使用y方法後, 以後都不用比較了, 全部使用y方法過河
2.算法正確性證明:
為什麼每次先讓最慢兩人過河? 因為他們遲早要過河…早過晚過一樣, 而晚過的話, 有可能時間不能被優化, 所以選擇最先過
為什麼是兩人, 不是三人? 因為這船一次只能兩人, 三人問題和兩人問題的優化一樣, 所以一次考慮三人毫無意義, 同理, 三人以上不加考慮
為什麼某次用y過河後不用再比較xy了?
先看這個例子:
1 99 100 101
用x方法是99+1+101+99= 300
y方法是 101+1+100+1 = 203
y比x快的原因是2A+C+D A+2B+D, 即 A+C2B
容易想到, 從此以後A+C都會小於2B了(因為C越來越小)
3.補充:
算法分析就到這裡了, 至於具體的程序…樓主既然是ACMer, 這個應該不困難
當然, 如果樓主需要的話, 也可以給出程序
C語言小題目!
1,
main()
{char str[13];scanf(“%s”,str);printf(“%s\n”,str);}
若輸入abcd1234 efgh回車則程序輸入結果是abcd1234 為什麼?
scanf(“%s”,str); 遇到空格, 讀取截止.所以只讀取abcd1234
2,
c[N]中的各項值是1CR2CR34
使用getchar()時會讀取回車符的.
如果將for(;iN;c[i]=getchar();i++); 改為
for(;iN;scanf(“%c”, c[i]),i++); 的話就能輸出12345
C語言的小題目
這個程序很簡單,用遞歸是把問題複雜化了,不過實現的方法有很多種,只要能實現就行。以下是我的一種方法,已經過編譯調試,可運行
算法核心如下:
while
(
i
loop
)
{
sum
+=
a
*
pow(
10
,
i
)
+
temp;
temp
+=
a
*
pow(
10
,
i
);
i
++;
}
我想你應該能看懂,就不具體解釋了哈
程序源代碼如下:
#include
“stdio.h”
#include
“math.h”
int
main()
{
int
a;
/*進行計算的數*/
int
loop;
/*循環次數*/
int
i
=
0;
/*循環起始值*/
double
temp
=
0;
/*過程變量,存儲上一次的值*/
double
sum
=
0;
/*總和*/
printf(
“Please
input
two
numbers
form
as:
numerA
numberLOOP\n”
);
scanf(
“%d
%d”,
a
,
loop
);
while
(
i
loop
)
{
sum
+=
a
*
pow(
10
,
i
)
+
temp;
temp
+=
a
*
pow(
10
,
i
);
i
++;
}
printf(
“\nResult
is:
%.0f\n”
,
sum
);
return
0;
}
原創文章,作者:PAQMA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/316764.html