如何判断输入的几个数字互不相同

本文介绍了一种高效的算法来确保用户输入的五个1-22之间的数字互不相同。通过使用数组记录每个数字出现的次数,一旦发现重复数字即刻提示用户重新输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天正在做一个小的程序开发,其中要判断输入界面的几个数字互不相同,找到了一个比较起来效率比较高的方法:

1.要求输入的是1-22之间的数

2.要求输入五个数字

方法如下:

int num[23];   //数组统计输入的每个数字的个数,输入数字与数组的下标相同

int count=0;

while(count<5)

{

    //每次循环获得界面上最后输入的数字 假设获得的数字为getednum;

   num[getednum]++;

   if(num[getednum]>1)

  {

       messagebox("请输入互不相同的数字,谢谢");

  }

}

   

### C++ 实现判断 9 个数是否互不相等的方法 在 C++ 中,可以通过多种方法来实现判断 9 个数是否互不相等的功能。以下是几种常见的解决方案: #### 方法一:使用双重循环进行两两比较 通过嵌套的 `for` 循环逐一比较每一对数字,如果发现有相同数字则立即返回 false。 ```cpp #include <iostream> using namespace std; bool areAllUnique(int arr[], int size) { for (int i = 0; i < size - 1; ++i) { for (int j = i + 1; j < size; ++j) { if (arr[i] == arr[j]) { return false; // 发现有重复项 } } } return true; // 所有数字均不同 } int main() { int numbers[9]; cout << "请输入9个整数:" << endl; for (int i = 0; i < 9; ++i) { cin >> numbers[i]; } if (areAllUnique(numbers, 9)) { cout << "这9个数互不相等" << endl; } else { cout << "这9个数中有相等的情况" << endl; } return 0; } ``` 这种方法的时间复杂度为 \(O(n^2)\)[^2],适用于较小的数据集。 --- #### 方法二:利用哈希表(unordered_set) 借助 STL 的 `unordered_set` 数据结构存储已读取的数字,每次插入前检查该数字是否存在集合中。如果存在,则说明有重复;否则继续处理下一个数字。 ```cpp #include <iostream> #include <unordered_set> using namespace std; bool areAllUnique(const int arr[], int size) { unordered_set<int> seenNumbers; for (int i = 0; i < size; ++i) { if (seenNumbers.find(arr[i]) != seenNumbers.end()) { return false; // 已经存在于集合中的数字 } seenNumbers.insert(arr[i]); } return true; // 集合中无重复项 } int main() { int numbers[9]; cout << "请输入9个整数:" << endl; for (int i = 0; i < 9; ++i) { cin >> numbers[i]; } if (areAllUnique(numbers, 9)) { cout << "这9个数互不相等" << endl; } else { cout << "这9个数中有相等的情况" << endl; } return 0; } ``` 此方法的时间复杂度接近于 \(O(n)\)[^4],因为平均情况下查找和插入操作均为常数时间。 --- #### 方法三:排序后检测相邻元素 先对数组进行排序,随后遍历排序后的数组并检查是否有连续两项相同。如果有,则表明这些数字并非全部唯一。 ```cpp #include <iostream> #include <algorithm> using namespace std; bool areAllUnique(int arr[], int size) { sort(arr, arr + size); for (int i = 0; i < size - 1; ++i) { if (arr[i] == arr[i + 1]) { return false; // 排序后相邻元素相等 } } return true; // 没有找到任何重复项 } int main() { int numbers[9]; cout << "请输入9个整数:" << endl; for (int i = 0; i < 9; ++i) { cin >> numbers[i]; } if (areAllUnique(numbers, 9)) { cout << "这9个数互不相等" << endl; } else { cout << "这9个数中有相等的情况" << endl; } return 0; } ``` 这种方案基于快速排序或其他高效排序算法完成预处理阶段的工作,其整体性能取决于所选的具体排序技术,在最坏情况下的运行时间为 \(O(n \log n)\)[^4]。 --- ### 总结 以上三种方法各有优劣: - **双重循环**适合小型输入规模; - **哈希表**提供更高效的查询能力,尤其对于大规模随机分布数据表现良好; - **排序法**可能更适合那些已经部分有序或者允许额外空间开销的应用场景。 最终选择应依据具体需求权衡效率与资源消耗之间的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值