Ⅰ 快快编程的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个数的数值,符合要求,望采纳~