GPLTをエクスポートする
記事ディレクトリ
トピックの言い換え
7-8レンタル(20ポイント)
以下は、かつて新浪微博で人気だった写真です。
突然、インターネット上でこれを破る方法を尋ねる助けを求める声がありました。実際、このコードは非常に単純で、インデックス配列はarr配列の添え字であり、index [0] = 2はarr [2] = 1に対応し、index [1] = 0はarr [0] = 8に対応します。 index [2] = 3 arr [3] = 0に対応します。以下同様です...電話番号を18013820100として取得するのは簡単です。
この質問では、任意の電話番号に対してこのコードを生成するプログラムを作成する必要があります。実際、最初の2行が生成されている限り、その後の内容は変更されません。
入力フォーマット:
11桁の携帯電話番号を1行に入力してください。
出力フォーマット:
入力した番号のコードの最初の2行を生成します。ここで、arrの番号は降順で指定する必要があります。
入力サンプル:
18013820100
サンプル出力:
int [] arr = new int [] {8,3,2,1,0};
int [] index = new int [] {3,0,4,3,1,0,2,4,3,4,4};
問題分析と解決策のアイデア
1.まず、文字列変数を使用して、入力した電話番号をキャッチします。
2.電話番号に表示される番号を数えます(配列a)。
3.出力サンプルのフォーマット順に従って、最大から最小へ出力します。同時に、別の配列cを使用して、電話番号に表示された番号を最大から最小まで保持します。
4. cを作成した後、文字列sの各文字をcと1つずつ比較して添え字を決定し、出力します
。5。注:出力例 "int [] arr = new int [] {8、3 、2,1,0}; "出力{}の間の最後の数字の後にコンマはありません。
アイデアは比較的単純で、ブロガーは問題の解決策を書き始めたばかりで、多くの場所が不完全に検討されています。あなたが私を訂正してくれることを願っています!
コード
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
string s;
int a[10]={
0,0,0,0,0,0,0,0,0,0},b[11],c[10];
cin>>s;
for(int i=0;i<11;i++)
{
if(s[i]=='0') a[0]=1;
else if(s[i]=='1') a[1]=1;
else if(s[i]=='2') a[2]=1;
else if(s[i]=='3') a[3]=1;
else if(s[i]=='4') a[4]=1;
else if(s[i]=='5') a[5]=1;
else if(s[i]=='6') a[6]=1;
else if(s[i]=='7') a[7]=1;
else if(s[i]=='8') a[8]=1;
else if(s[i]=='9') a[9]=1;
}
int k=0,n=0;
for(int l=0;l<10;l++)
if(a[l]==1) n++;
cout<<"int[] arr = new int[]{";
for(int j=9;j>=0;j--)
{
if(a[j]==1&&k<n-1) {
cout<<j<<",";c[k]=j;k++;}
else if(a[j]==1){
cout<<j;c[k]=j;k++;}
}
cout<<"};"<<endl;
cout<<"int[] index = new int[]{";
for(int p=0;p<s.length();p++)
for(int t=0;t<k;t++)
{
if(s[p]-'0'==c[t]&&p<10) cout<<t<<",";
else if(s[p]-'0'==c[t]) cout<<t;
}
cout<<"};"<<endl;
}