五位长的01串
#include<iostream>
#include<bitset>//二进制
using namespace std;
void func() // 使用进制转化
{
for(int i=0;i<32;i++){
cout<<i%32/16<<i%16/8<<i%8/4<<i%4/2<<i%2<<endl;
}
}
void dfs(int num, int n, int *a) { //nums是当前枚举的数,n为位数
//num:表示当前处理的位序号。在开始时,num 是 0,表示我们从二进制序列的最左边(最高位)开始处理。
//n:表示二进制序列的总位数。它用于确定我们需要生成多少位的二进制序列。
if (num == n) {
// 打印结果
for (int i = 0; i < n; i++) {
cout << a[i];
}
cout <<endl;
return;
}
// 将当前位设置为0,继续递归
a[num] = 0;
dfs(num + 1, n, a);
// 将当前位设置为1,继续递归
a[num] = 1;
dfs(num + 1, n, a);
}
int main()
{
//for(int i=0;i<32;i++)
// cout << bitset<5>(i) <<endl; //使用bitset
int a[5];
dfs(0,5,a);
}
?数据特征:找max,min,sum
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 10005
int a[N];
int n;
int mem[N];
int st[N];
int sum;
int find_max(int *a, int l,int r)
{
int max;
if( l == r) max = a[l];
else if(r - 1 == l)
{
if(a[l] < a[r]) max = a[r];
else max = a[l];
}
else
{
int mid = (l + r) / 2;
int left_max = find_max(a,0,mid);
int right_max = find_max(a,mid + 1, r);
if(left_max > right_max)
max = left_max;
else max = right_max;
}
return max;
}
int find_min(int *a, int l,int r)
{
int min;
if( l == r) min = a[l];
else if(r - 1 == l)
{
if(a[l] < a[r]) min = a[l];
else min = a[r];
}
else
{
int mid = (l + r) / 2;
int left_max = find_min(a,0,mid);
int right_max = find_min(a,mid + 1, r);
if(left_max < right_max)
min = left_max;
else min = right_max;
}
return min;
}
int main()
{
scanf("%d",&n);
for(int i = 0; i < n; i ++)
{
cin>>a[i];
sum += a[i];
}
sort(a,a + n);
//int res_max = find_max(a,0,n - 1);
//int res_min = find_min(a,0,n - 1);
cout<<a[n - 1]<<endl;
cout<<a[0]<<endl;
cout<<sum;
return 0;
}
排序
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 205
int a[N];
int n;
int mem[N];
int st[N];
// int length = sizeof(numbers) / sizeof(numbers[0]); 本例不建议,因为int a[N];
// sort(numbers, numbers + length); // 对数组进行排序
bool compare(int a, int b) {
return a < b;
}
int main()
{
scanf("%d",&n);
for(int i = 0; i < n; i ++) scanf("%d",&a[i]);
sort(a, a + n, compare); // 要传参,默认cimpare是a < b,表示升序
for(int i = 0; i < n; i ++)
printf("%d ",a[i]);
return 0;
}
进制转换
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 100
int arr[N];
int n;
int mem[N];
int st[N];
int nums;
int main()
{
scanf("%d",&n);
for(int i = 0; i < n; i ++)
{
int sum = 0;
int cnt = 0;
scanf("%d",&nums);
while(nums)
{
int t = nums % 10;
sum += t * pow(16,cnt);//这里可以让cnt = 1,然后cnt *= 16的,没必要使用pow
cnt ++;
nums /= 10;
}
cout<<sum<<endl;
while(sum)
{
cout<<sum % 8;
sum /= 8;
}
cout<<endl;
}
return 0;
}
查找数
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 10005
int a[N];
int n;
int mem[N];
int st[N];
int sum;
int target;
int find_target(int *a, int l,int r,int target) //二分查找
{
int ans;
if(l < r)
{
int mid = (l + r) / 2;
if(target == a[mid]) return mid;
else if(target < a[mid]) return find_target(a,0,mid - 1, target);
else return find_target(a,mid + 1, r, target);
}
return -1;
}
int main()
{
scanf("%d",&n);
for(int i = 0; i < n; i ++)
{
cin>>a[i];
}
cin>>target;
sort(a,a + n);
for(int i = 0; i < n; i ++) cout<<a[i]<<' ';
cout<<endl;
int ans = find_target(a, 0 , n - 1, target);
cout<<ans;
return 0;
}
10进制转为16进制
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
#define N 100
int arr[N];
int n;
int mem[N];
int main()
{
char s[100];
int cnt;
cin>>cnt;
int i = 0;
if(cnt == 0)
{
cout<<'0';
exit(-1);
}
while(cnt)
{
int t = cnt % 16;
if(t < 10)
s[i] = t + '0';
else if( t == 10)
s[i] = 'A';
else if( t == 11)
s[i] = 'B';
else if( t == 12)
s[i] = 'C';
else if( t == 13)
s[i] = 'D';
else if( t == 14)
s[i] = 'E';
else if( t == 15)
s[i] = 'F';
else
{
}
cnt /= 16;
i++;
}
for(int j = i - 1; j >= 0 ;j --)
printf("%c",s[j]);
return 0;
}