2回目のc++ジョブ

2025 ワード

I.     現在の学習の弱い知識点は何ですか.     
1         文字配列と文字列配列の違い:文字配列と文字列配列の初期化が区別されないことが多い.
 
2         動的2次元配列の申請:acm問題を書くときに2次元配列をよく使うことがありますが、入力:int**p=new int[n][10]を使うたびに、エラーが報告されます(新聞:10個の整数長の空間を開くことができない、つまり定数で空間を申請することが許されないので、よく申請に失敗し、最後にint p[n][10]をデフォルトで使用するしかありません、このような形式)
 
3         ポインタ配列で文字列配列を格納する:授業中に聞いたのは少し丸飲みで、授業後に消化されず、広工のACM試合で使いたいときには使えない.たとえば、問題の1つは、複数の文字列を入力し、その占有空間の大きさを判断することです.int asdを入力し、この文字列を関数judge()【その占有空間を判断し、空間の値を返すために使用する】に入力したい場合ですが、これらの文字列配列を格納するために文字列配列を構築しようとすると、作成に失敗します.(私の作成方法はstring a=new string[n];)最後にコンパイルが通らず、ポインタ配列を使おうとしたが使えなかったので、この問題を放棄しました.
 
 
 
II.  難問の解決:
タイトル:
2つの整数配列を与え,本題では両者が共有していない要素を見つけることを要求する.
1.     入力形式:
入力はそれぞれ2行に2つの整数配列を与え、各行には正の整数N(≦20)が先に与えられ、次いでN個の整数が与えられ、その間はスペースで区切られている.
2.     出力フォーマット:
1行に数字で与えられた順序で出力するのは2つの数のグループが共有する要素ではなく、数字間はスペースで区切られているが、行末に余分なスペースがあってはならない.テーマは少なくとも1つのこのような数字があることを保証する.同じ数字は繰り返し出力しない
 
1.    サンプルを入力:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1

2.    出力サンプル:
3 5 -15 6 4 1

 
テーマ分析:
この問題の本質は,2つの配列の並列を探し出し,配列の基本問題に属することである.
 
解題構想【コード構想】:
  • ・2つの配列を作成し、2つのforループでそれぞれ入力します.
  • 配列cは、並列セットを格納するために作成され、
  • は二重forサイクルを確立し、外サイクルは第1の配列を遍歴し、内サイクルは第2の配列を遍歴し、
  • は、第1の配列の各数を第2の配列の全数と順次比較させ、等しくなければカウンタcountに1を加算させる.内ループを終了すると、最後にカウンタ得数が第2の配列の総数に等しくなければ、この配列にこの数と同じ数があることを示すので、この数は配列に計上されず、等しくなれば配列c;
  • 同じb配列に対して同じ操作を行う;
  • 関数judge(int a,int b[],int n)を作成し、数字aに配列bのある数と等しい数があるか否かを判断し、ある場合は0を返し、1
  • を返さない.
  • 新しい配列dを作成し、c配列を遍歴し、c配列の各数とjudge関数で判断し、判断したらこの値を配列d
  • に割り当てる.
  • 最終サイクルc
  •  
    核心技術の総括:
  • は、ループを介して2つの配列を順次比較し、それらの並列セット
  • を得る.
  • は、入力する数が配列の既存の数と重複しているかどうかを比較する比較関数を作成します.
  •  
    過程で出会った問題を解決し、どのように解決するか.
    最も難しい問題はやはりどのように合併後の同じ要素を排除するかで、その時は長い間考えていたが、ずっと考えていなかった.
    最后に考えて、并びの配列を1つの新しい配列に顺次入れて、それから毎回新しい配列に数を追加する时この数をすでに配列の中の数と比较させて、同じがあるかどうかを见て、あるなら入力しません;入力しないで、最后に得た新しい配列、私达の必要な配列です;.