C++中有变量a,b,c,d,e,f作为条件表达式:如果其中任意2个及以上相同则表达式为假。怎样写?

如果在QT中有更方便的方法也希望大家指明,谢谢。

--------------------------------分割-----------------------------------

23:34

okey,,size()和set的用法真的还不懂。c++初学水平那种写法更容易理解呢? 或者谁可以通俗易懂的讲讲set的用法?感谢! 另外注意到一点,题主本意是任意两个或两个以上相同,抱歉没有阐明这一点。


思路:if (set&{a, b, c, d, e, f}.size() == 6)

随手写的,语法不一定对。


茴字的四样写法怎可错过,来抖个模板机灵

template &

bool check(const int64_t n, const Args… args) {

return _check_(0, args…) &>= n;

}

int64_t _check_(const int64_t current) {

return current;

}

template &

int64_t _check_(const int64_t current, const T head, const Args… args) {

int64_t c = head ? (current+1) : current;

return _check_(c, args…);

}


template&
struct tester;

template&
struct tester& {
bool operator()(T1 t1, T2 t2, T3 ...t3) const {
return t1!=t2 tester&()(t1, t3...) tester&()(t2, t3...) tester&()(t3...);
}
};

template&
struct tester& {
bool operator()(T1 t1, T2 t2) const {
return t1!=t2;
}
};

template&
struct tester& {
bool operator()(T) const {
return true;
}
};

template&<&>
struct tester&<&> {
bool operator()() const {
return true;
}
};

template&
bool test(T ...t) {
return tester&()(t...);
}

然后你就可以写

assert(test(1));
assert(test(1,2));
assert(test(1,2,3));
assert(!test(1,1,3));
assert(!test(1,3,1));

不过话说回来我是有多无聊才会写这种程序…………


// btw: n &< 100 // testEqual( 6, a, b, c, d, e, f ) bool testEqual( int n, ... ) { va_list ap; va_start(ap, n); int ar[100]; int i, j; for( i = 0; i &< n; i++ ) { ar[i] = va_arg(ap, int); } va_end(ap); int counter = 0; for( i = 0; i&


if ([a,b,c,d,e,f]() {
std::unordered_map& umap;
++umap[a]; ++umap[b]; ++umap[c]; ++umap[d]; ++umap[e]; ++umap[f];
return std::max_element(umap.begin(), umap.end(), [](const auto v1, const auto v2) {
return v1.second &< v2.second; } )-&>second &> 2;
}())
{
cout &<&< "fuck" &<&

(雾


set不允许重复,如果往里面放了n个,最后大小小于n个,就证明有重复的出现了

这题应该简化为:给定任意一堆值,判断是否有重复值出现

不想用set的话自己for套for判断吧

其实就是删选掉重复的值,set正好适合


(a==b)+(a==c)+(a==d)+(a==e)+(a==f)+
(b==c)+(b==d)+(b==e)+(b==f)+
(c==d)+(c==e)+(c==f)+
(d==e)+(d==f)+
(e==f)&>=2


放到数组里,

排序,

依次判断相邻元素

(两个就看a[i]与a[i+1],三个就看a[i]与a[i+2]


#include &
#include &
#include &
using namespace std;

int main(int argc, char** argv) {
if (argc == 1) {
return 0;
}
set& s;
for (int i=1; i&


(a-b)(a-c)(a-d)(a-e)(a-f)
(b-c)(b-d)(b-e)(b-f)
(c-d)(c-e)(c-f)
(d-e)(d-f)
(e-f)


推薦閱讀:

C++高級編程、Windows程序設計和MFC,這三者學習的順序?
MFC 中 CString 與 std::string 如何相互轉換?
倘若用文言文語法編程會怎樣?
「作者都承認 C 和 Unix 不過是惡作劇而已」是真的嗎?

TAG:编程语言 | QtC开发框架 | C |