// レポート課題03 /* //Cプログラム #include #define NUMBER 8 //オブジェクト形式マクロを追加してもよい int main(void) { int num[NUMBER] = {1, 3, 3, 1, 6, 8, 6, 8}; int count = 0; //ここに処理を書く(独自変数の追加OK,独自関数の追加NG) return 0; } //実行例 # ./report3 numが{ 1, 6, 3, 1, 3, 6 }の場合, 数値:1 インデックス:0,3 数値:6 インデックス:1,5 数値:3 インデックス:2,4 要素間の比較回数:15 --------------- numが{ 3, 1, 3 }の場合, エラー:配列の要素数が奇数です. */ public class ExerR03 { public static final int NUMBER = 8; @SuppressWarnings("unused") public static void main(String[] args) { int[] num = {1, 3, 3, 1, 6, 8, 6, 8}; int count = 0; // 場合1におけるエラー処理 if (NUMBER % 2 == 1) { System.out.printf("エラー:配列の要素数が奇数です\n"); return; } // すでに比較を行ったかを保存する配列 boolean[] seen = new boolean[NUMBER]; // 比較を行う for (int i = 0; i < NUMBER - 1; i++) { // すでに比較を行った要素の場合スキップ if (seen[i]) continue; System.out.printf("数値: %d インデックス: %d", num[i], i); // 比較する要素の登場回数を保存する変数 int lcount = 1; // 比較対象以降の要素と比較 for (int l = i + 1; l < NUMBER; l++) { // すでに比較を行った場合はスキップ if (seen[l]) continue; // 比較し一致した場合状態を保存、結果を出力し登場回数を加算 if (num[i] == num[l]) { System.out.printf(",%d", l); seen[l] = true; lcount++; } // 比較回数を加算 count++; } System.out.printf("\n"); // 場合2におけるエラー処理 if (lcount == 1) { System.out.printf("エラー:%dは1度しか登場しません\n", num[i]); return; } // 場合3におけるエラー処理 if (lcount > 2) { System.out.printf("エラー:%dは3度以上登場します\n", num[i]); return; } seen[i] = true; } System.out.printf("要素間の比較回数:%d\n", count); } }