Q&A
前提
「1~nのうち3の倍数と3のつく数字を全て出力するプログラム」を作成しています。
2パターンのプログラムを作成しました。
実現したいこと
入力は「n=30」、期待出力は「3 6 9 12 13 15 18 21 23 24 27 30」。
該当ソースコード➀は問題なく作動しますが、➁は正常に作動せず、原因が分かりません。➁が作動しない原因を学びたいです。
該当のソースコード
C++
1//ソースコード➀ 2#include <bits/stdc++.h> 3#define _GLIBCXX_DEBUG 4#define rep(i, n) for (int i = 0; i < (int)(n); i++) 5#include <math.h> 6#include<algorithm> 7using namespace std; 8 9void call(int n){ 10 for(int i=1; i<=n; i++){ 11 int x = i; 12 if(x%3==0) cout << " " << x; 13 else{ 14 do{ 15 if(x%10==3) cout << " " << x; 16 x /= 10; 17 }while(x); 18 } 19 } 20} 21 22int main(){ 23 int n; 24 cin>>n; 25 call(n); 26}
該当のソースコード
C++
1//ソースコード➁ 2#include <bits/stdc++.h> 3#define _GLIBCXX_DEBUG 4#define rep(i, n) for (int i = 0; i < (int)(n); i++) 5#include <math.h> 6#include<algorithm> 7using namespace std; 8 9void call(int n){ 10 for(int i=1; i<=n; i++){ 11 if(i%3==0) cout << " " << i; 12 else{ 13 do{ 14 if(i%10==3) cout << " " << i; 15 i /= 10; 16 }while(i); 17 } 18 } 19} 20 21int main(){ 22 int n; 23 cin>>n; 24 call(n); 25}
試したこと
ソースコード➀の11行目において、「int x = i」のように、変数xにiの値を代入する事で作動しました。
ソースコード➁においても。forループによってiの値は更新される為、変数xを用意する手間が省けるのでは?と考えてました。
しかし、ソースコード➁だとエラーが発生してしまう為、原因を知りたいです。
長文駄文失礼しました。
分かりにくい質問で大変恐縮ですが、ご教示いただけると幸いでございます。
何卒よろしくお願いいたします。
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/01/18 13:29