怎样判断它们都不相等?
关键是写法要霸气.
不要这种 i1 != i2 ,i1 != i3 , i1 != i4 , i2 != i3 , i2 != i4 , i3 != i4 哈.
谢谢
43 个解决方案
#1
sum = i1+i2+i3+i4;
average = (i1+i2+i3+i4)/4;
if(sum == average*4)
四个数相等;
else
四个数不等;
因为是整数,所以可以这么做
#2
上面那个有问题
这个是判断不全相等
要判断全不相等,暂时没有想出比较好的方法
average1 = (i1+i2+i3+i4)/4;
average2 = (i1+i2+i3)/3;
if(sum == average1 * 4 && sum == average2 * 3)
四个数全相等;
else
四个数不全等;
这个是判断不全相等
要判断全不相等,暂时没有想出比较好的方法
#3
a[4] = {i1, i2, i3, i4};
equal = 0;
for(i = 0; i < 4; ++i)
{
for(j = i; j < 3; ++j)
{
if(a[j] == a[j+1])
{
equal = 1;
break;
}
}
}
if(equal == 0;)
四个数全不相等;
楼主弄个数组,双重循环就解决了,想不出霸气的写法
#4
那就用递归,简单得来又不失霸气。
#5
int a[] = {i1, i2, i3, i4};
int n = sizeof(a) / sizeof(int);
if (count_if(a, a + n, bind2nd(equal<int>(), *a)) == n)
//全相等;
#6
用位运算解决吧!每位比较。
#7
#include <algorithm>
namespace std;
int a[] = {1, 2, 3, 4};
int n = sizeof(a) / sizeof(int);
if (count(a, a + n, *a) == n)
{
//全相等
}
#8
定义宏
#define ALL_DIFFERENT(i1, i2, i3, i4) (i1 != i2 && i1 != i3 && i1 != i4 && i2 != i3 && i2 != i4 && i3 != i4 )
#define ALL_DIFFERENT(i1, i2, i3, i4) (i1 != i2 && i1 != i3 && i1 != i4 && i2 != i3 && i2 != i4 && i3 != i4 )
#9
霸气有什么用,霸气对CPU又没有价值,只会使效率更低罢了
#10
这个一个NP问题,复杂度是O(n!),没有什么好办法。
只能用递归,老老实实算吧。
只能用递归,老老实实算吧。
#11
写法要霸气。。。
楼主,你要求太高了。。。
楼主,你要求太高了。。。
#12
合并相同的数,然后计算结果数目是不是4,用给量子计算专用的算法,把4个数朝天上一扔,然后检查是否相同的数落到了同一个杯子里,最后看看共有几个杯子有数字,如果是4个,就表明这4个数全不相同。
#13
你只考虑了非负数的情况,如果是:
i1=1,i2=2,i3=-3,i4=0
sum=0
average1=0
average2=0
你的结果是全相等,但实际不是。
可以用空间换时间方法,也就是类似#12楼的方法:
long a[2*N_MAX]={0};//空间(可动态分配)
int m[N]={M1,M2,..,MN};//比较的个数N,且m[N]里的最大值<N_MAX
for(i=0;i<N;i++){
m[i]+=N_MAX; //转换成正数(0<m[i]<2*N_MAX)
a[m[i]]++; //计算重复数量
}
if(a[m[0]]==N) return;//全等
for(i=0;i<N;i++){
if(a[m[i]]>1) break;
}
if(i==N){
//全不等
}else{
//部分相等
}
#14
简单的我不会,霸气我就会
CString ls;
long i[4] = {1,2,3,4};
ls.Format("%d,%d,%d,%d\r\n是请按\"是\",不是请按\"否\"",i[0],i[1],i[2],i[3]);
if (MessageBox(ls,"下面4个数是否全不相等?",MB_YESNO|MB_ICONQUESTION) == IDYES){
//用户说是
}
else{
//用户说否
}
CString ls;
long i[4] = {1,2,3,4};
ls.Format("%d,%d,%d,%d\r\n是请按\"是\",不是请按\"否\"",i[0],i[1],i[2],i[3]);
if (MessageBox(ls,"下面4个数是否全不相等?",MB_YESNO|MB_ICONQUESTION) == IDYES){
//用户说是
}
else{
//用户说否
}
#15
偶像....
#16
.....
#17
跟俺的算法有一拼啊,不过您这个更霸气。
#18
C# 凑下热闹
bool result = (new int[] { i1, i2, i3, i4 }).Distinct().Count() < 4;
#19
如果4个整数不大于65535,可以用这个方法。
UINT64 i, j = 12345678;
int a = 1234;
int b = 2345;
int c = 15678;
int d = 7890;
//i=0x1ed23d3e092904d2;
*((USHORT*)&i + 0) = a;
*((USHORT*)&i + 1) = b;
*((USHORT*)&i + 2) = c;
*((USHORT*)&i + 3) = d;
if (i == j)
{
printf("i=j\n");
}
else
{
printf("i!=j\n");
}
#20
少了个步骤,如果4个数都不大于65535,可以把4个数,合并为一个64位的整数来运算。
UINT64 i, j;
int a = 1234;
int b = 2345;
int c = 15678;
int d = 7890;
int e = 12347;
int f = 23459;
int g = 56788;
int h = 23457;
//i=0x1ed23d3e092904d2;
*((USHORT*)&i + 0) = a;
*((USHORT*)&i + 1) = b;
*((USHORT*)&i + 2) = c;
*((USHORT*)&i + 3) = d;
//j = 0x5ba1ddd45ba3303b
*((USHORT*)&j + 0) = e;
*((USHORT*)&j + 1) = f;
*((USHORT*)&j + 2) = g;
*((USHORT*)&j + 3) = h;
if (i == j)
{
printf("i=j\n");
}
else
{
printf("i!=j\n");
}
#21
不好意思,看错题目。
#22
会用正则表达式吗?如果会,那写起来就很霸气,但估计生成源代码就很长,执行效率也不高。绝对比
i1 != i2 ,i1 != i3 , i1 != i4 , i2 != i3 , i2 != i4 , i3 != i4 生成的源代码长。
i1 != i2 ,i1 != i3 , i1 != i4 , i2 != i3 , i2 != i4 , i3 != i4 生成的源代码长。
char str[256];
sprintf(str, "%d,%d,%d,%d", i1, i2, i3, i4;
Re = /(?:^|,)(\d+),(:?.*,)?\1(?:,|$)/ig;
if (Re.test(str))
//有重复数字出现;
else
//没有重复,即全不相等
#23
鼓励编程简单易懂,不追求过多的花哨!
#24
lz sb
#25
确实很霸气!
#26
这个不就是正解,怎么没人理???
#27
if(a & b & c & d == a)
不过要求a是最大的
现在弱弱的问,我是不是把问题转化为求最大值了
不过要求a是最大的
现在弱弱的问,我是不是把问题转化为求最大值了
#28
if((a & b & c & d == a)&&(a | b | c | d == a))
{
//四个全部相同
}
else
{
}
这下应该是对了吧???
{
//四个全部相同
}
else
{
}
这下应该是对了吧???
#29
(a&b&c&c) == (a|b|c|d)
#30
楼上两位,计算的都是
!(4个数全相等)
而楼主的问题是
4个数全不等.
---------------------
楼主的问题,用位运算说不定也可以,但像这种效率和可读性要选择一个平衡点的/*并且可读性高的性能不一定低,或至少是不会低太多*/
一般人都很容易选吧.
!(4个数全相等)
而楼主的问题是
4个数全不等.
---------------------
楼主的问题,用位运算说不定也可以,但像这种效率和可读性要选择一个平衡点的/*并且可读性高的性能不一定低,或至少是不会低太多*/
一般人都很容易选吧.
#31
你先给我解释一下什么叫霸气
#32
其实如果数字非常多(比如几十万个来比较),用CMapPtrToPtr会非常好理解,而且一般人写不出那个速度.
这个方法跟您楼上说向天上丢硬币,是一个思路.
#33
还要霸气。。。直接Hello World!好了
#34
有问题啊!!!!!!!
#35
好能搞。。。
#36
6个异或可以接受不???
#37
if((a-b==0)&&(b-c==0)&&(c-d==0))
#38
人眼识别算法,强悍。。
#39
关键不是摄像头识别人眼,而是人眼识别屏幕。。
#40
这个太。。。蛋疼了。
#41
非常霸气!太强悍了!!!
#42
差点笑喷了,给力啊。。
#43
霸气顶个鸟用
#1
sum = i1+i2+i3+i4;
average = (i1+i2+i3+i4)/4;
if(sum == average*4)
四个数相等;
else
四个数不等;
因为是整数,所以可以这么做
#2
上面那个有问题
这个是判断不全相等
要判断全不相等,暂时没有想出比较好的方法
average1 = (i1+i2+i3+i4)/4;
average2 = (i1+i2+i3)/3;
if(sum == average1 * 4 && sum == average2 * 3)
四个数全相等;
else
四个数不全等;
这个是判断不全相等
要判断全不相等,暂时没有想出比较好的方法
#3
a[4] = {i1, i2, i3, i4};
equal = 0;
for(i = 0; i < 4; ++i)
{
for(j = i; j < 3; ++j)
{
if(a[j] == a[j+1])
{
equal = 1;
break;
}
}
}
if(equal == 0;)
四个数全不相等;
楼主弄个数组,双重循环就解决了,想不出霸气的写法
#4
那就用递归,简单得来又不失霸气。
#5
int a[] = {i1, i2, i3, i4};
int n = sizeof(a) / sizeof(int);
if (count_if(a, a + n, bind2nd(equal<int>(), *a)) == n)
//全相等;
#6
用位运算解决吧!每位比较。
#7
#include <algorithm>
namespace std;
int a[] = {1, 2, 3, 4};
int n = sizeof(a) / sizeof(int);
if (count(a, a + n, *a) == n)
{
//全相等
}
#8
定义宏
#define ALL_DIFFERENT(i1, i2, i3, i4) (i1 != i2 && i1 != i3 && i1 != i4 && i2 != i3 && i2 != i4 && i3 != i4 )
#define ALL_DIFFERENT(i1, i2, i3, i4) (i1 != i2 && i1 != i3 && i1 != i4 && i2 != i3 && i2 != i4 && i3 != i4 )
#9
霸气有什么用,霸气对CPU又没有价值,只会使效率更低罢了
#10
这个一个NP问题,复杂度是O(n!),没有什么好办法。
只能用递归,老老实实算吧。
只能用递归,老老实实算吧。
#11
写法要霸气。。。
楼主,你要求太高了。。。
楼主,你要求太高了。。。
#12
合并相同的数,然后计算结果数目是不是4,用给量子计算专用的算法,把4个数朝天上一扔,然后检查是否相同的数落到了同一个杯子里,最后看看共有几个杯子有数字,如果是4个,就表明这4个数全不相同。
#13
你只考虑了非负数的情况,如果是:
i1=1,i2=2,i3=-3,i4=0
sum=0
average1=0
average2=0
你的结果是全相等,但实际不是。
可以用空间换时间方法,也就是类似#12楼的方法:
long a[2*N_MAX]={0};//空间(可动态分配)
int m[N]={M1,M2,..,MN};//比较的个数N,且m[N]里的最大值<N_MAX
for(i=0;i<N;i++){
m[i]+=N_MAX; //转换成正数(0<m[i]<2*N_MAX)
a[m[i]]++; //计算重复数量
}
if(a[m[0]]==N) return;//全等
for(i=0;i<N;i++){
if(a[m[i]]>1) break;
}
if(i==N){
//全不等
}else{
//部分相等
}
#14
简单的我不会,霸气我就会
CString ls;
long i[4] = {1,2,3,4};
ls.Format("%d,%d,%d,%d\r\n是请按\"是\",不是请按\"否\"",i[0],i[1],i[2],i[3]);
if (MessageBox(ls,"下面4个数是否全不相等?",MB_YESNO|MB_ICONQUESTION) == IDYES){
//用户说是
}
else{
//用户说否
}
CString ls;
long i[4] = {1,2,3,4};
ls.Format("%d,%d,%d,%d\r\n是请按\"是\",不是请按\"否\"",i[0],i[1],i[2],i[3]);
if (MessageBox(ls,"下面4个数是否全不相等?",MB_YESNO|MB_ICONQUESTION) == IDYES){
//用户说是
}
else{
//用户说否
}
#15
偶像....
#16
.....
#17
跟俺的算法有一拼啊,不过您这个更霸气。
#18
C# 凑下热闹
bool result = (new int[] { i1, i2, i3, i4 }).Distinct().Count() < 4;
#19
如果4个整数不大于65535,可以用这个方法。
UINT64 i, j = 12345678;
int a = 1234;
int b = 2345;
int c = 15678;
int d = 7890;
//i=0x1ed23d3e092904d2;
*((USHORT*)&i + 0) = a;
*((USHORT*)&i + 1) = b;
*((USHORT*)&i + 2) = c;
*((USHORT*)&i + 3) = d;
if (i == j)
{
printf("i=j\n");
}
else
{
printf("i!=j\n");
}
#20
少了个步骤,如果4个数都不大于65535,可以把4个数,合并为一个64位的整数来运算。
UINT64 i, j;
int a = 1234;
int b = 2345;
int c = 15678;
int d = 7890;
int e = 12347;
int f = 23459;
int g = 56788;
int h = 23457;
//i=0x1ed23d3e092904d2;
*((USHORT*)&i + 0) = a;
*((USHORT*)&i + 1) = b;
*((USHORT*)&i + 2) = c;
*((USHORT*)&i + 3) = d;
//j = 0x5ba1ddd45ba3303b
*((USHORT*)&j + 0) = e;
*((USHORT*)&j + 1) = f;
*((USHORT*)&j + 2) = g;
*((USHORT*)&j + 3) = h;
if (i == j)
{
printf("i=j\n");
}
else
{
printf("i!=j\n");
}
#21
不好意思,看错题目。
#22
会用正则表达式吗?如果会,那写起来就很霸气,但估计生成源代码就很长,执行效率也不高。绝对比
i1 != i2 ,i1 != i3 , i1 != i4 , i2 != i3 , i2 != i4 , i3 != i4 生成的源代码长。
i1 != i2 ,i1 != i3 , i1 != i4 , i2 != i3 , i2 != i4 , i3 != i4 生成的源代码长。
char str[256];
sprintf(str, "%d,%d,%d,%d", i1, i2, i3, i4;
Re = /(?:^|,)(\d+),(:?.*,)?\1(?:,|$)/ig;
if (Re.test(str))
//有重复数字出现;
else
//没有重复,即全不相等
#23
鼓励编程简单易懂,不追求过多的花哨!
#24
lz sb
#25
确实很霸气!
#26
这个不就是正解,怎么没人理???
#27
if(a & b & c & d == a)
不过要求a是最大的
现在弱弱的问,我是不是把问题转化为求最大值了
不过要求a是最大的
现在弱弱的问,我是不是把问题转化为求最大值了
#28
if((a & b & c & d == a)&&(a | b | c | d == a))
{
//四个全部相同
}
else
{
}
这下应该是对了吧???
{
//四个全部相同
}
else
{
}
这下应该是对了吧???
#29
(a&b&c&c) == (a|b|c|d)
#30
楼上两位,计算的都是
!(4个数全相等)
而楼主的问题是
4个数全不等.
---------------------
楼主的问题,用位运算说不定也可以,但像这种效率和可读性要选择一个平衡点的/*并且可读性高的性能不一定低,或至少是不会低太多*/
一般人都很容易选吧.
!(4个数全相等)
而楼主的问题是
4个数全不等.
---------------------
楼主的问题,用位运算说不定也可以,但像这种效率和可读性要选择一个平衡点的/*并且可读性高的性能不一定低,或至少是不会低太多*/
一般人都很容易选吧.
#31
你先给我解释一下什么叫霸气
#32
其实如果数字非常多(比如几十万个来比较),用CMapPtrToPtr会非常好理解,而且一般人写不出那个速度.
这个方法跟您楼上说向天上丢硬币,是一个思路.
#33
还要霸气。。。直接Hello World!好了
#34
有问题啊!!!!!!!
#35
好能搞。。。
#36
6个异或可以接受不???
#37
if((a-b==0)&&(b-c==0)&&(c-d==0))
#38
人眼识别算法,强悍。。
#39
关键不是摄像头识别人眼,而是人眼识别屏幕。。
#40
这个太。。。蛋疼了。
#41
非常霸气!太强悍了!!!
#42
差点笑喷了,给力啊。。
#43
霸气顶个鸟用