给定一个n,就从1到n遍历,只要含有2、0、1、9的就把它加起来 但是注意 加完就要break了,因为满足多个条件的只能加一次。举个例子,29既含有2又含有9,但是只能加一次。
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int sum = 0;
for(int i = 1; i < n; i++){
int x = i;
while(x != 0){
t = x % 10;
x /= 10;
if( t==2 || t==0 || t==1 || t==9){
sum += i;
break;
}
}
}
cout << sum;
return 0;
}
2.大衣的异或回文对 - 蓝桥云课 (lanqiao.cn)
1.用两个for循环嵌套 两两组合遍历 直接异或得出异或结果 然后判断这个结果是不是回文数字
2.怎么判断:把它反过来然后判断是不是跟原来的数字相等
3.怎么反过来:不断取出个位上的数字(通过%10来实现) 然后把它往前移(通过*10来实现)
4.异或结果是针对二进制来说的 为什么13异或27的结果是22:
13的二进制表示:1101
27的二进制表示:11011
低位对齐 高位补零: 01101 ^ 11011 =10110
10110的十进制表示:22
第一部分是求和 第二部分是判断素数
求和就是把通过取模10每个数拿出来相加
素数:首先知道2是最小的素数 然后除了自己不要取模为0就好了
在小小的矩阵里面找呀找呀找
我就是想遍历这个二维数组,然后把他们的值作为一个新开的一维数组的的下标(可以想成一个桶子)然后一边放一边看 看哪个桶子里面的数字超过了这个矩阵的一半大小
然后我的天呢 就看到题解里面一个很Dior的
他把这个矩阵用一维数组来存储,然后对其进行排序,如果谁超过了一半,那么肯定包含这个一维数组最中间的那个数字,直接输出中间那个数字。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n ,m;
int nums[1000000];
cin >> n >> m;
int t = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cin>>nums[t++];
}
}
sort(nums,nums+t);
cout << nums[t/2];
return 0;
}
注意数组的大小