#include #define NUMBER 6 /* * 比較回数を減らすために、すでに比較した要素の状態を配列に保存し、 * その要素の比較をスキップする。 * また、場合2と3におけるエラー処理を逐次的に行うことで複雑な処理を減らしている。 */ int main() { int num[NUMBER] = {1, 6, 3, 1, 3, 6}; int count = 0; // 場合1におけるエラー処理 if (NUMBER % 2 == 1) { printf("エラー:配列の要素数が奇数です\n"); return 1; } // すでに比較を行ったかを保存する配列 int seen[NUMBER] = {0}; // 比較を行う for (int i = 0; i < NUMBER - 1; i++) { // すでに比較を行った要素の場合スキップ if (seen[i] == 1) continue; printf("数値:%d インデックス:%d", num[i], i); // 比較する要素の登場回数を保存する変数 int lcount = 1; // 比較対象以降の要素と比較 for (int l = i + 1; l < NUMBER; l++) { // すでに比較を行った場合はスキップ if (seen[l] == 1) continue; // 比較し一致した場合状態を保存、結果を出力し登場回数を加算 if (num[i] == num[l]) { printf(",%d", l); seen[l] = 1; lcount++; } // 比較回数を加算 count++; } printf("\n"); // 場合2におけるエラー処理 if (lcount == 1) { printf("エラー:%dは1度しか登場しません\n", num[i]); return 1; } // 場合3におけるエラー処理 if (lcount > 2) { printf("エラー:%dは3度以上登場します\n", num[i]); return 1; } // 状態を保存 seen[i] = 1; } printf("要素間の比較回数:%d\n", count); return 0; }