搭建网站难吗整合营销经典案例
目录
1.握手问题(条件枚举)
2.门牌制作(十进制整数拆解)
3.九进制转十进制(进制转换)
一.a 进制数转换为十进制数
二.十进制转换为a进制
4.跑步(日期问题)
1.握手问题(条件枚举)
简单的条件枚举
假设前7个人,不互相握手,其他人互相握手
#include <iostream>
using namespace std;
int main()
{// 请在此输入您的代码int ret=0;for(int i=1;i<=50;i++){for(int j=i+1;j<=50;j++){if(i<=7 && j<=7) continue;else ret++;}}cout<<ret<<endl;return 0;
}
2.门牌制作(十进制整数拆解)
所谓十进制整数拆解,就是将一个十进制整数x按照十进制拆解除每一位
#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{int count=0;for(int i=1;i<=2020;i++){for(int j=i;j>0;j=j/10){if(j%10==2){count++;}}}printf("%d",count);// 请在此输入您的代码return 0;
}
3.九进制转十进制(进制转换)
一.a 进制数转换为十进制数
计算方式是把每一位上的数字乘以该位的权重,再将所有结果相加,最终得到对应的十进制数。
例如对于一个二进制数101,转换成十进制过程为:
=1×2^2+0×2^1+1×2^0
=4+0+1
=5
二.十进制转换为a进制
例如,将十进制数 13 转换为二进制数(a = 2
)的过程:
- 第 1 步:
13 ÷ 2 = 6...1
,余数为 1。 - 第 2 步:
6 ÷ 2 = 3...0
,余数为 0。 - 第 3 步:
3 ÷ 2 = 1...1
,余数为 1。 - 第 4 步:
1 ÷ 2 = 0...1
,余数为 1。
将余数从下往上排列结果为1101,因为取余顺序与结果相反,所以使用队列的先进先出,每次取余将结果压入队列
#include<bits/stdc++.h>
using namespace std;//将 a 进制数 num 转换为十进制数
int convertother(int a, int num)
{int b = 0;int ret = 0;int i = 0;// 当 num 大于 0 时,说明还有位需要处理,继续循环while(num > 0){// 通过取余运算得到 num 的最低位数字b = num % 10;// 将 num 除以 10,去掉已经处理过的最低位num /= 10;// 把当前位数字 b 乘以 a 的 i 次幂,累加到结果 ret 中ret += b * pow(a, i);i++;}return ret;
}//将十进制数 num 转换为 a 进制数
int convert2other(int a, int num)
{int b = 0;// 变量 ret 用于存储最终转换得到的 a 进制结果int ret = 0;// 变量 i 作为指数,用于表示当前位对应的 10 的幂次int i = 0;queue<int> mod;// 当 num 大于 0 时,继续进行除 a 取余操作while(num > 0){// 计算 num 除以 a 的余数b = num % a;// 将 num 除以 a 并取整num /= a;// 把余数 b 压入队列 mod 中mod.push(b);}while(!mod.empty){// 取出队列的队首元素b = mod.front();// 把队首元素乘以 10 的 i 次幂,累加到结果 ret 中ret += b * pow(10, i);// 指数 i 加 1,为处理下一位做准备i++;}return ret;
}int main()
{int a = 9;int num = 2022;int s = convertother(a, num);cout << s << endl;return 0;
}
4.跑步(日期问题)
考点:
- 判断闰年
-
if(y % 4==0 && y % 100!=0 && m==2 || y%400==0 && m==2)
- 日期的遍历,一个日期到另一个日期的遍历
- 星期的判断,如某天是星期几
#include <iostream>
using namespace std;
int ds[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{// 请在此输入您的代码int sy=2022;int ey=2022;int week=6;int ans=0;for(int y=sy;y<=ey;++y)//枚举年{for(int m=1;m<=12;++m)//枚举月{int dd=ds[m];//判断闰年if(y % 4==0 && y % 100!=0 && m==2 || y%400==0 && m==2) dd=29;for(int d=1;d<=dd;++d)//枚举日{if(week==0 || week==6 || d%10==1) ans++;//判断是否满足题目week=(week+1)%7;//向后推移星期几}}}cout<<ans<<endl;return 0;
}
谢谢