Ⅰ 快快編程的2題怎麼做
Ⅱ 快快編程第790題怎麼做
假如里程錶上的數字為x,先得到最高位數的值y,判斷y的值和3以及8的關系,如果y<3那麼,最高位為0,如果3<y<8,那麼最高位為1,如果最高位y>8,那麼最高位為2;然後從次高位開始到個位結束,每個為都為2。最後用x減去這個數得到就是所求的結果。
例如,里程碑上的數是1240,那麼 個位上它跳過了3和8所以為2;十位上跳過了30-39和80-89,所以為20;百位上它跳過300-399和800-899所以為200,千位為1<3所以為0,所以跳過的數位 222,因此真正走的公里數為1240-222 = 1018。
C++編程如下:
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int total = n; //total記錄原來的數字
int m = 0; // m算出需要減掉的數字
int t = 1;
while (n / 10 != 0) {
n = n / 10;
m = m * 10 + 2;
t = 10 * t;
}
if (3 < n && n < 8)
m = m + t;
else if (n > 8)
m = m + 2 * t;
else
;
cout << total - m << endl;
return 0;
}
Ⅲ 快快編程SE什麼意思
往往看到提交時
啊!
WA TE RTE ME ……
啊!SE!
SE是什麼?快快編程中沒有給出相關回答。
我個人猜測:這是你寫程序用錯了語言。
比方說:你是C++學生,
在提交代碼時用了Python語言,就可能出現SE了。
Ⅳ C++快快編程954題
Ⅳ 快快編程RTE什麼意思
呃,RTE表示運行時錯誤,例如數組下標越界(數組開小了)。
Ⅵ 快快編程797題應該怎麼做
僅由5和8組成的整數排序如下:
5 8 //一位數共2個
55 58 85 88 //兩位數共2^2個
555 558 585 588 855 858 885 888 //三位數共2^3
...
n位數一共2+2^2+...+2^n=2^(n+1)-2
由此可求得n與k的關系,在n位數中,前一半數最高位為5,後一半數最高位為8
可遞歸求得每位數的數值。C++代碼如下:
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
string ans; //保存最終結果
void dfs(int k) {
if (k <= 2) {
char c = k == 1 ? '5' : '8';
ans.push_back(c);
return;
}
int n = (int)log2(k + 1); // 該數為n位數
int start = (int)pow(2, n) - 1;
int half = (int)pow(2, n - 1); // n位數個數的一半
if (k - start + 1 <= half) { // 在n位數中的第幾個
ans.push_back('5');
k -= half;
}
else {
ans.push_back('8');
k -= half * 2;
}
dfs(k); // 繼續判斷下一位數
}
int main() {
cout << "僅由5和8組成的整數的前50個數: ";
for (int i = 1; i <= 50; i++) {
ans.clear();
dfs(i);
cout << ans << " ";
if (i % 10 == 0) cout << " ";
}
int k;
cout << " 輸入僅由5和8組成的整數中的第幾個數: ";
cin >> k;
ans.clear();
dfs(k);
cout << "第" << k << "個數為: " << ans << endl;
return 0;
}
g++編譯通過,運行結果如下:
輸出了前50個數以及第1000個數的數值,符合要求,望採納~