最初のものが最初です。常にあなたの変数を初期化し、あなたがそれらを使用しようとしているときは、常に正確に宣言しよう:
ここ
int a[20],i,j,n,l;
配列変数は、後に宣言しaswellとして、ごみ値を持っています。
、変数の残りのあなたが初めてのためにそれらを使用するべきである:
for(int i = 0; i < n; i++)
{
cout << "ENTER : ";
cin >> a[i];
}
int l = (n/2) - 1;
今のコード行:あなたは、最初の空の値を持つ配列を初期化する必要があります
a[i] = a[i] + a[j];
a[j] = a[i] - a[j];
a[i] = a[i] - a[j];
これらは2つの値を交換することになっていますが、最初の視点では理解しにくいです。 2つの値を交換する関数を作成する方が良いです。標準の1つを使用してくださいstd::swap
。
swap(a[i], a[j]);
あなたのアルゴリズムは間違っています。このコード行for(i=0,j=l; i<n/2,j>=0; i++,j--)
は、終了条件が間違っています。あなたはほとんどすべての要素を2回逆にしています。最初の半分(1/2)の途中で停止する必要があります(n/2)。
for (int i = 0, j = l; i <= l/2 && j > l/2; i++, j--)
以下の条件と同じです。
for (int i = n/2, j = n - 1; i <= (n + l)/2 && j > (n + l)/2; i++, j--)
だからあなたの最終的なコードは次のようになります。
今
#include <iostream>
using namespace std;
int main()
{
int a[20] {};
cout << "ENTER NO. OF ELEMENTS: ";
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cout << "ENTER : ";
cin >> a[i];
}
int l = (n/2) - 1;
for (int i = 0, j = l; i <= l/2 && j > l/2; i++, j--)
swap(a[i], a[j]);
for (int i = n/2, j = n - 1; i <= (n + l)/2 && j > (n + l)/2; i++, j--)
swap(a[i], a[j]);
for (int i = 0; i < n; i++)
cout << a[i] << ' ';
return 0;
}
を、問題は、コードのいずれかで非常に読みやすいものではなく、あなたがC++を使用していることから、それはあなたが上がらない残念ですそれが持っている標準的なアルゴリズムを使用します。 また、変数名は説明的なものではないので、コードは維持する痛みになります。
#include <iostream>
#include <algorithm>
int main()
{
const int MaxNumbers = 20;
int numbersToInverse[MaxNumbers] {};
int elementCount = 0;
std::cin >> elementCount;
for (int i = 0; i < elementCount; i++)
std::cin >> numbersToInverse[i];
int middleOfVector = elementCount/2;
std::reverse(numbersToInverse, numbersToInverse + middleOfVector);
std::reverse(numbersToInverse + middleOfVector, numbersToInverse + elementCount);
for (int i = 0; i < elementCount; i++)
std::cout << numbersToInverse[i] << ' ';
return 0;
}
はもちろん、より良い実装がstd::vector
となるだろうが、私は配列を保ちました。私はあなたにstd::reverse
の仕組みをチェックさせてくれます。 using namespace std;
も使用しないでください。ここをクリックwhyを参照してください。
コード作成サービスではありませんので、[mcve]を作成してください。 –
配列を逆にするために要素を追加または減算する必要はありません。あなたのコードが何をしているのかは明らかではありません。変革が適切に行われなければならないという要件はありますか? – user463035818
算術演算よりも2つの値をスワップする方が良い方法があります。例えば 'std :: swap'のようにします。 – molbdnilo