Arrays 如何检查数组中的所有值是否相同?
假设我有一个数组Arrays 如何检查数组中的所有值是否相同?,arrays,c,if-statement,Arrays,C,If Statement,假设我有一个数组short int check[10]={1,1,1,1,1,1,1} 我想检查所有元素是否相同。 我在stackoverflow和google中都找不到答案,但我在C++中遇到了这段代码 bool aresame(int a[], int n) { int i; unordered_map<int, int> m; for (i = 0; i < n; i++) { m[a[i]]++; } i
short int check[10]={1,1,1,1,1,1,1}代码>
我想检查所有元素是否相同。
我在stackoverflow
和google
中都找不到答案,但我在C++
中遇到了这段代码
bool aresame(int a[], int n)
{
int i;
unordered_map<int, int> m;
for (i = 0; i < n; i++)
{
m[a[i]]++;
}
if (m.size() == 1)
{
return true;
}
else
{
return false;
}
}
bool arame(int a[],int n)
{
int i;
无序地图m;
对于(i=0;i
调整一点,结果是巨大的错误。
我尝试使用的是if的
,但这很不专业。
也许你也知道,还有其他方法吗?正如评论中指出的,使用if
没有什么不专业的地方。此代码应适用于:
#include <stdbool.h>
bool are_same(int *arr, unsigned int len)
{
for (int i = 1; i < len; ++i)
if (arr[0] != arr[i])
return false;
return true;
}
如果
很好,那就没有什么不专业的了
我应该注意到在short int check[10]={1,1,1,1,1,1}
只有9个元素是1,最后一个元素将被初始化为0,因此此检查将始终为false
,如果忽略大小,即检查[]={1,1,1…
,则不会出现此问题,因为数组的大小将由初始值设定项中的元素数推断
#include <stdio.h>
#include <stdbool.h>
bool aresame(short int a[], size_t n) // added value to check
{
for (size_t i = 1; i < n; i++)
{
if(a[i] != a[0])
return false; // if a different value is found return false
}
return true; // if it reaches this line, all the values are the same
}
int main()
{
short int check[]={1,1,1,1,1,1,1,1,1};
printf("%s", aresame(check, sizeof check / sizeof *check) ? "true" : "false");
}
#包括
#包括
bool arame(短int a[],size\u t n)//要检查的附加值
{
对于(大小i=1;i
如果您不喜欢If语句,请尝试以下操作:
bool aresame(int a[], int n) {
int i = 0;
while(i<n && a[i]==a[0])
i++;
return i == n;
}
bool arame(int a[],int n){
int i=0;
而(为了完整起见,这里有一个递归版本(没有明确的if
s):
bool arame(int a[],int n){
return(n这里是一个快速而肮脏的if
-less实现,假设2的补码没有填充位:
#include <stdbool.h>
#include <string.h>
bool are_same(const int *arr, size_t n) {
return n == 0 || !memcmp(arr, arr + 1, (n - 1) * sizeof(*arr));
}
为什么使用<代码>如果< /Code >不专业?重复数组并检查它是否与第一条条目相符。<代码>为(i=1;IU找到C++代码,但您需要C中的解决方案),那么不要浪费时间与该代码。“遍历每个索引并检查该元素是否与第一个元素相同”?您自己的尝试出了什么问题?如果以非专业的方式使用,则使用if
是不专业的。如果使用正确,则if
没有问题。在for循环中使用if
更“专业”“而不是增加映射的元素。请记住,如果您总是在if
的一个分支中返回,那么默认情况下,过去的所有内容都会变成else
,因此您可以跳过该部分并将其向下折叠一点。
bool aresame(int a[],int n){
return (n <= 1) || (a[0] == a[n-1] && aresame(a, n-1));
}
#include <stdbool.h>
#include <string.h>
bool are_same(const int *arr, size_t n) {
return n == 0 || !memcmp(arr, arr + 1, (n - 1) * sizeof(*arr));
}
#include <stdbool.h>
#include <string.h>
bool is_repeating(const int *arr, size_t n, size_t r) {
return n <= r || !memcmp(arr, arr + r, (n - r) * sizeof(*arr));
}