PAT L1-027レンタル(ラダーマッチ)、保管中に発生した問題の一部。

問題:

シーナマイクロブログは、画像の非常に火災以下となっているされています
ここに画像を挿入説明
タイムライン助けを叫び、どのようにこの休憩を雇います。実際には、このコードは非常にシンプルであり、インデックスは配列ARRインデックス配列であり、インデックス[0] = 2に相当ARR [2] = 1、インデックス [1] = 0 に相当ARR [0] = 8、インデックス [2] = 3 それが......入手が容易であるので、対応は、ARR [3] = 0、電話番号が18013820100です。

内容は同じであるの後ろに、フロント限り、実際にはそれに発生した2つの行を - この質問は任意の電話番号にコードを生成するプログラムを記述する必要があります。

入力フォーマット:

入力は、行の11桁の電話番号が与えられます。

出力フォーマット:

デジタルARRを降順に指定する必要があり、前記生成されたコードの入力、多数の前の2行。

サンプル入力:

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};

自分の問題のいくつかが発生しました:

この質問は難しいことではありません、しかし、私はint型の配列はよく18013820100この番号は保たれている考え始めた、悲劇の結果は、シナリオ、次の登場しました。ハ〜(厄介な)は、本当に愚かな間違いそれを作りました!その時、彼は反応しませんでした。
ここに画像を挿入説明
これはなぜでしょうか?

int配列はint型の数を格納することができますので、そうではなく、あなたが思う預金などよりも、デジタルとしてそれを使用する範囲は-2147483648に2147183648アレイストレージであるint型。

私の考え:

  1. チャーの入力の形。
  2. その後、int型numは型にキャスト。
  3. 次いで、デエンファシス、重複排除方法は、フラグ配列でマークされている、[12]スタートフラグは、0 NUMに置かれた場合、フラグは、0であるか否かを判断する[NUM]ゼロ、各入力NUMでありますSTの場合に、その後、[12]配列で、フラグ[NUM] = 1、同様に次のif文、重複排除の効果を達成するようになっています。
  4. そして、降順でカスタムの並べ替えと一度。
  5. また、NU配列と元の数を維持します。
  6. 次いで、行に[12]の結果を格納する配列の結果を見つけるために後に、次いで、ラインを比較するための2つのループを使用します。

以下は、プレイコードの私の考えです。

#include<bits/stdc++.h>
using namespace std;
int flag[12],st[12],nu[12]; 
bool cmp(int a,int b) {
	return a>b;
}
int main() {
	char s;
	int count=0,num,tot=0;
	for(int i=0; i<11; i++) {
		cin>>s;
		num=(int)(s-'0');
		nu[tot++]=num;
		if(flag[num]==0) {
			st[count++]=num;
			flag[num]=1;
		}
	}
	sort(st,st+count,cmp);
	int result[12],ans=0;
	for(int i=0; i<tot; i++) {
		for(int j=0; j<count; j++) {
			if(st[j]==nu[i]) {
				result[ans++]=j;
			}
		}
	}
	cout<<"int[] arr = new int[]{";
	for(int i=0; i<count-1; i++) {
		cout<<st[i]<<",";
	}
	cout<<st[count-1]<<"};";
	cout<<endl;
	cout<<"int[] index = new int[]{";
	for(int i=0; i<ans-1; i++) {
		cout<<result[i]<<",";
	}
	cout<<result[ans-1]<<"};";
	return 0;
}

コードは簡潔で、何の感謝を取っていません!
ねえ!私も料理でした。

リリース8元の記事 ウォンの賞賛8 ビュー205

おすすめ

転載: blog.csdn.net/xzy15703841578/article/details/105273221