我是一名新程序员,并且想从数字列表(2,5,8)中生成具有3位数字的数字数组。我已经创建了一个代码,但是输出不是我的预期结果。这是我的简单代码:
%thread
我预期的结果是222,555和888,但实际输出是222,55005和8800008。
答案 0 :(得分:4)
可能会有所帮助。您忘记重置times
变量
int main()
{
int arr[3]={2,5,8};
int d=3;
int times=1;
for (int a:arr){
int sum = a;
for (int i=1; i<d; i++){
times *= 10;
sum += a*times;
}
cout<<sum<<endl;
times = 1; //<---added
sum=0;
}
return 0;
}
答案 1 :(得分:3)
要使当前代码生成222、555、888,您忘记重新初始化times
。
您可能已经创建了一个用于澄清的子功能:
int mul_by_111(int n) // { return 111 * n; }
{
int sum = a;
int times = 1;
for (int i = 1; i < 3; ++i) {
times *= 10;
sum += a * times;
}
return sum;
}
int main()
{
int arr[] = {2, 5, 8};
for (int a:arr){
std::cout << mul_by_111(a) << std::endl;
}
}
如果您希望笛卡尔积显示222、225、228、522,..,888
您可能(天真的)通过3个循环来完成此操作:
int main()
{
int arr[] = {2, 5, 8};
for (int a:arr){
for (int b:arr){
for (int c:arr){
std::cout << a << b << c << std::endl;
}
}
}
}
range-v3的某些库建议使用cartesian_product
来简化操作:
for (auto t : ranges::view::cartesian_product(arr, arr, arr)) {
std::cout << std::get<0>(t) << std::get<1>(t) << std::get<2>(t) << std::endl;
// std::apply([](auto... args){ (std::cout << ... << args) << std::endl; }, t); // C++17
}
答案 2 :(得分:0)
使用router.push({ path: this.$route.query.redirectTo })
变得微不足道:
<form v-on:submit.prevent ...
更新:
要使置换成为算法的一部分,您可以使用std::next_permutation
:
std::stringstream
答案 3 :(得分:0)
问题在于变量的范围。只需将它们放在块中即可,一切都很好:
int main()
{
int arr[3]={2,5,8};
int d=3;
for (int a:arr){
int sum = a;
int times=1;
for (int i=1; i<d; i++){
times *= 10;
sum += a*times;
}
cout<<sum<<endl;
}
return 0;
}
变量sum和time将在阻止时初始化。无需重置它们。