随便记记一些精彩的小东西
C++判断一个数是不是整数
法一:
if(t!=(int)t) cout<<"NO\n";
else cout<<"YES\n";
利用数据类型强制转换来判断
错误摘记
- 注意表达式的等价表示方法
!(b==n&&a==n) ≠ (b!=n&&a!=n)
- 这段代码在
v[u] = 0时会死循环!以后别这么写了!
for(int i = -v[u]; i <= v[u]; i += 2 * v[u]){
int v = u + i;
if(v < 1 || v > n) continue;
if(dis[v] == inf){
dis[v] = dis[u] + 1;
q.push({dis[v], v});
}
}
判断一个数是不是2的幂次方
利用 \(n \& (n - 1)\) 来判断,式子为 0 即说明原数为 2 的幂次方
比如说 \(16_{10} = 10000_2,15_{10} = 1111_2,16 \& 15 = 0\)
ll n;
cin >> n;
if((n & (n - 1)) == 0) cout << "YES\n";
else cout << "NO\n";
如何证明 1²+2²+…+n² 为平方数的解只有 n=1 或 n=24?
得到排序的排名
void solve(){
int n = 7;
int a[] = {3, 7, 1, 4, 5, 2, 6};
vector<int> id(n);
iota(id.begin(), id.end(), 0);
for(int i = 0; i < n; ++ i){
cout << id[i] << " \n"[i == n - 1];
}
sort(id.begin(), id.end() ,[&](int i, int j){
return a[i] > a[j];
});
// id数组表示第 i 名在 id[i] 的位置
for(int i = 0; i < n; ++ i){
cout << a[i] << " \n"[i == n - 1];
}
for(int i = 0; i < n; ++ i){
cout << id[i] << " \n"[i == n - 1];
}
return ;
}

浙公网安备 33010602011771号