排除闰年这种情况,统计一年中月日数位之和出现的次数。根据年份的数位之和得到该年特殊日期的个数。闰年单独处理。
#include
#include
using namespace std;
// count[i]表示月的数位数字和日的数为数字之和等于i出现的次数
int count[21];
// 闰2月单独判断
int month_day[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 用于快速得到小于35的数字数位之和,在main中初始化
int dig_bit_sum[35];
// 获取一个数的数位之和
int get_bit_sum(int n) {
if (n < 10) return n;
int bit_sum = 0;
while (n) {
bit_sum += n % 10;
n /= 10;
}
return bit_sum;
}
// 判断是否为闰年
bool is_leap_year(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
return false;
}
int main(){
// 初始化dig_bit_sum数组
for (int i = 1; i <= 31; ++i) {
dig_bit_sum[i] = get_bit_sum(i);
}
// 获取所有月日日期数位之和的次数
for (int month = 1; month <= 12; ++month) {
int mon_bit_sum = dig_bit_sum[month];
for (int i = 1; i <= month_day[month-1]; ++i) {
int day_bit_sum = dig_bit_sum[i];
count[day_bit_sum + mon_bit_sum]++;
}
}
int ans = 0;
for (int year = 1900; year <= 9999; ++year) {
int year_bit_sum = get_bit_sum(year);
if (year_bit_sum > 20) continue;
ans += count[year_bit_sum];
// 如果是闰年还要计算2月29日(数位之和为13)的情况
if (is_leap_year(year) && year_bit_sum == 13) {
ans++;
}
}
printf("%d", ans);
}
#include
using namespace std;
int main(){
int h=6,m=13,s=22;
int count=0;
while(true){
if(h==14&&m==36&&s==20) break;
if(m==s) count++;
s++;
if(s==60){
s=0;m++;
if(m==60){
m=0;h++;
}
}
}
cout<<(count-(14-6));
return 0;
}
#include
using namespace std;
int one[20] = {97, 92, 0, 0, 89, 82, 0, 0, 0, 95, 0, 0, 94, 0, 0, 0, 98, 93, 0, 0};
int two[20] = {90, 85, 0, 0, 83, 86, 0, 97, 0, 99, 0, 0, 91, 83, 0, 0, 83, 87, 0, 99};
int three[20] = {0, 96, 0, 0, 97, 0, 0, 96, 89, 0, 96, 0, 0, 87, 98, 0, 99, 92, 0, 96};
int four[20] = {0, 0, 0, 80, 0, 0, 87, 0, 0, 0, 97, 93, 0, 0, 97, 93, 98, 96, 89, 95};
int five[20] = {0, 0, 93, 86, 0, 0, 90, 0, 0, 0, 0, 98, 0, 0, 98, 86, 81, 98, 92, 81};
int main()
{
int maxsum=0;
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
if(j==i) continue;
for(int k=0;k<20;k++){
if(k==i||k==j) continue;
for(int m=0;m<20;m++){
if(m==i||m==j||m==k) continue;
for(int n=0;n<20;n++){
if(n==i||n==j||n==k||n==m) continue;
if((one[i]+two[j]+three[k]+four[m]+five[n])>maxsum)
maxsum=one[i]+two[j]+three[k]+four[m]+five[n];
}
}
}
}
}
cout<<maxsum<<endl;
return 0;
}
单纯的用暴力求解算法,┭┮﹏┭┮啥也不会
#include
#include
#include
using namespace std;
int main()
{
string a = "0100110001010001";
set<string> b;
for(int i = 0 ; i < a.size() ; i++){
for(int j = 1 ; i + j <= a.size() ; j++){
b.insert(a.substr(i,j));
}
}
cout<<b.size()<<endl;
return 0;
}
// 规律:
// 个位元素中每60项为1个周期
// 每个周期中个位=7的共有8项
#include
using namespace std;
int main()
{
long long i,a=1,b=1,tem,n=202202011200,total=0;
for(i=3;i<=n;i++)
{
tem=b;
b+=a;
a=tem;
if(b%10==7) total++;
}
cout<<total;
return 0;
}
该题采用唯一分解定理:每个正整数都能够唯一的表示成它的质因数的乘积。 n =p1^α1p2^α2...p3^α3, p1< p2 <... < ps; 例如,280=2^35^1*7^1
。
#include
using namespace std;
#define ll long long
int main()
{
int num = 0;
ll n, res = 0;
cin >> n;
for(int i = 2; i <= sqrt(n); i++)
{
num = 0;
while(n % i == 0)
{
num ++;
n /= i;
}
if(num > 0)
{
res ++;
}
}
if(n > 1)
{
res ++;
}
cout << res;
return 0;
}
#include
using namespace std;
int main()
{
int n = 0;
cin >> n;
cout << (char)(n+64);
return 0;
}
简单!!!
#include
#include
using namespace std;
int main()
{
//数组a储存每个小写字母的出现次数
int a[26] = {0};
//储存字符串
string arr;
//储存最大出现次数
int max = 0;
//储存出现次数最大的字母
char max_sp;
//输入字符串
cin >> arr;
//对字母串中的每个字符计数
for(int i = 0; i < arr.length(); i++)
{
a[arr[i] - 'a']++;
}
//找出最大出现次数
for(int i = 25; i >= 0; i--)
{
if(a[i] >= max)
{
max = a[i];
max_sp = char(i + 'a');
}
}
//找到出现次数最大的字典序最小的字母,输出它和它的出现次数
cout << max_sp << endl;
cout << max;
return 0;
}