1.门牌制作
#include<iostream>
#include<string>
using namespace std;
int main()
{
int i;
int sum = 0;
for (i = 1; i <= 2020;++i)
{
int in = i;
while (in)
{
if (in % 10 == 2)
{
++sum;
}
in /= 10;
}
}
cout << sum;
return 0;
}
624
2.既约分数
#include<iostream>
using namespace std;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int main(){
int ans=0;
for(int i=1;i<=2020;++i){
for(int j=1;j<=2020;++j){
if(gcd(i,j)==1)
++ans;
}
}
cout<<ans;
return 0;
}
2481215
3.蛇形填数
#include<iostream>
using namespace std;
int main() {
int i = 0;
int j = 0;
int cnt = 2;
int a[250][250];
a[0][0] = 1;
while (cnt <1000) {
j++;
while (i != -1 && j != -1) {
a[i][j] = cnt++;
if (j == 0)
break;
i++;
j--;
}
i++;
while (i != -1 && j != -1) {
a[i][j] = cnt++;
if (i == 0)
break;
i--;
j++;
}
}
cout << a[19][19];
return 0;
}
761
4.跑步锻炼
#include <bits/stdc++.h>
using namespace std;
int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int y=2000,m=1,d=1,w=6,ans=2;
while(y!=2020||m!=10||d!=1)
{
if((y%4==0&&y%100!=0)||y%400==0)
M[2]=29;
else
M[2]=28;
d++;
w=(w+1)%7;
if(d>M[m])
{
d=1;
m++;
if(m>12)
{
y++;
m=1;
}
}
if(d==1||w==1)
ans++;
ans++;
}
cout<<ans;
}
8879
5.七段码
80
6.成绩统计
#include <bits/stdc++.h>
using namespace std;
int a[100010];
int n;
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int num1=0,num2=0;
for(int i=0;i<n;i++)
{
if(a[i]>=85)
{
num1++;
}
if(a[i]>=60 )
{
num2++;
}
}
cout<<round(num2*1.0/n*100)<<'%'<<endl;
cout<<round(num1*1.0/n*100)<<'%'<<endl;
}
7.回文日期
#include <bits/stdc++.h>
using namespace std;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int data)
{
int year=data/10000;
int month=(data/100)%100;
int day=data%100;
if(month<0 || month>12)
return false;
if(day==0 || month!=2 && day>days[month])
return false;
if(month==2)
{
int leap=(year%4==0 && year%100 !=0) || (year%400==0);
if(day>days[month]+leap)
return false;
}
return true;
}
int main()
{
int data;
int hui=0,abhui=0;
int flag1=0,flag2=0;
int s[9]={0};
int i,x;
cin>>data;
for(i=data+1;flag1==0||flag2==0;i++)
{
memset(s,0,8*sizeof(int));
if(check(i))
{
x=i;
for(int j=8;j>0;j--)
{
s[j]=x%10;
x=x/10;
}
if(s[1]==s[8] && s[2]==s[7] &&s[3]==s[6] && s[4]==s[5] && flag1==0)
{
flag1=1;
hui=i;
}
if(s[1]==s[3] &&s[1]==s[6] &&s[1]==s[8] && s[2]==s[4] && s[2]==s[5] && s[2]==s[7] && flag2==0)
{
flag2=1;
abhui=i;
}
}
}
printf("%d\n%d",hui,abhui);
return 0;
}
8.子串分值和
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll pre[30];
string s;
int main()
{
IOS;
cin>>s;
ll len=s.length();
s="0"+s;//下标从1开始
ll ans=0;
for(ll i=1;i<=len;i++){
ans+=(i-pre[s[i]-'a'])*(len-i+1);
pre[s[i]-'a']=i;
}
cout<<ans<<endl;
getchar();
getchar();
return 0;
9.平面切分
#include<bits/stdc++.h>
using namespace std;
long double s[1010][2];//存储直线的A,B
long long ans;
bool st[1010]; //false表示不是重边
pair<long double,long double> p;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i][0]>>s[i][1];
set<pair<long double,long double> > points;
for(int j=0;j<i;j++){
if(st[j])continue;//直线是重边,跳过
if(s[i][0]==s[j][0]){//两条直线斜率相等时,判断是平行还是重合
if(s[i][1]==s[j][1]){
st[i]=true;//待添加直线是重边,退出循环
break;
}else continue;//直线平行,不需要计算交点
}
p.first=(s[j][1]-s[i][1])/(s[i][0]-s[j][0]);//交点的x坐标
p.second=s[i][0]*p.first+s[i][1];//交点的y坐标
points.insert(p);
}
if(!st[i])ans+=points.size()+1;//若当前直线不是重边,更新答案
}
cout<<ans+1;
return 0;
}
10.字串排序
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
int res=0;
cin>>s;
int i=1,j;
for(;i<=s.length();i++){
int fr=i-0,ba=s.length()+1-i;
for(j=i-1;j>0;j--){//向前
if(s[i-1]==s[j-1]){
fr=i-j;
break;
}
}
for(j=i+1;j<=s.length();j++){//向后
if(s[i-1]==s[j-1]){
ba=j-i;
break;
}
}
int n=fr*ba;
res+=n;
//printf("%d %d %d\n",fr,ba,n);
}
printf("%d",res);
return 0;
}