質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

3回答

966閲覧

Vector内の数字を素数だけを降順にする

Reeeen

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/04/29 22:10

Vector内の数字たとえば{5, 21, 44, 3, 50, 7, 80, 90, 11, 19}を降順にすることはできるのですが、素数だけを降順し、素数出ない数ははそのまま同じ場所に配置{19, 21, 44, 11, 50, 7, 80, 90, 3}このようにする場合

main int(){
vector<int> num{5, 21, 44, 3, 50, 7, 80, 90, 11, 19};
int tmp,p,q;
for(p = 0; p < num.size(); p++){
for(q = p + 1; q < num.size(); q++){

if(num[p] < num[q]){ tmp=num[p]; num[p]=num[q]; num[q]=tmp; } } } }

をどのように書き換えればいいのでしょうか

もしくはどのようなプログラムにすれば良いのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

main int() は、int main() にしましょう。
質問を編集して <code>ボタンを使ってソースを Markdown記法にしてください。

元のコードを尊重すれば、こんな風に書けました。

C++

1#include <iostream> 2#include <vector> 3#include <cmath> // sqrt 4using namespace std; 5 6bool isprime(int n) 7{ 8 if (n < 2) return false; 9 int m = sqrt(n); 10 for (int i = 2; i <= m; i++) 11 if (n % i == 0) return false; 12 return true; 13} 14 15int main() 16{ 17 vector<int> num {5, 21, 44, 3, 50, 7, 80, 90, 11, 19}; 18 vector<int> pos; 19 int tmp, p, q; 20 21 for (p = 0; p < num.size(); p++) 22 if (isprime(num[p])) pos.push_back(p); 23 24 for (p = 0; p < pos.size(); p++) { 25 for (q = p + 1; q < pos.size(); q++) { 26 if (num[pos[p]] < num[pos[q]]) { 27 tmp = num[pos[p]]; 28 num[pos[p]] = num[pos[q]]; 29 num[pos[q]] = tmp; 30 } 31 } 32 } 33 for (p = 0; p < num.size(); p++) cout << ' ' << num[p]; 34 cout << '\n'; 35}

投稿2020/04/30 16:20

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

あんまり考えてない...

C++

1#include <iostream> 2#include <vector> 3#include <algorithm> 4#include <utility> 5 6bool is_prime(int n) { 7 switch ( n ) { 8 case 2: case 3: case 5: case 7: return true; 9 default: 10 if ( n % 2 == 0 ) return false; 11 if ( n % 3 == 0 ) return false; 12 if ( n % 5 == 0 ) return false; 13 if ( n % 7 == 0 ) return false; 14 } 15 return true; 16} 17 18int main() { 19 using namespace std; 20 vector<int> num{ 5, 21, 44, 3, 50, 7, 80, 90, 11, 19 }; 21 vector<int> prime; 22 for ( int i = 0; i < num.size(); ++i ) { 23 if ( is_prime(num[i]) ) prime.push_back(i); 24 } 25 sort(prime.begin(), prime.end(), [&](int x, int y) { return num[x] > num[y]; }); 26 27 { 28 vector<int> tmp = num; 29 int t = 0; 30 for ( int i = 0; i < tmp.size(); ++i ) { 31 if ( is_prime(tmp[i]) ) num[i] = tmp[prime[t++]]; 32 } 33 } 34 35 for ( int item : num ) { cout << item << ' '; } 36 cout << endl; 37}

投稿2020/04/29 23:35

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

c

1for(p = 0; p < num.size(); p++){ 2/* ここ */ 3for(q = p + 1; q < num.size(); q++){ 4/* ここ */

num[p]が素数でなければcontinue
num[q]が素数でなければcontinue

をそれぞれ挿入するのが手っ取り早いですね。

投稿2020/04/29 22:50

編集2020/04/29 22:51
asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問