平面分割问题
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,sum;
while(scanf("%d",&n)==1)
{
sum=2;
for(int i=1;i<=n;i++)
sum=sum+2*(i-1);
cout<<sum<<endl;
}
return 0;
}
取石头游戏
#include<bits/stdc++.h>
using namespace std;
int dp[10000001],n;//dp存的对于先手来说的赢输情况
int main()
{
/*每次只能取1,3,7,8个*/
dp[1]=1;//1,3,7,8这些情况下,先手第一次就取完全部,剩下0个,就直接先手胜
dp[3]=1;
dp[5]=1;//5是先手取3 后手1 先手1 最后剩0 ,先手胜
dp[7]=1;
dp[8]=1;
while(cin>>n)
{
for(int i=9; i<=n; i++)
{
//i取完后剩下的能使后手失败那i状态就能胜
if(!dp[i-1] || !dp[i-3] || !dp[i-7] || !dp[i-8])
dp[i]=1;
else
dp[i]=0;
}
cout<<dp[n]<<endl;
}
return 0;
}
一年的第几天
#include<bits/stdc++.h>
using namespace std;
class base
{
public:
int m_year=0;
int m_month=0;
int m_day=0;
};
void getSumDay(int year,int month,int day)
{
int sum=0;
int d=day;
int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int m=month-1;
for(int i=0;i<m;i++)
sum+=monthday[i];
if((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
{
if (month >= 3)
cout<<sum+d+1;
else
cout<<sum+d;
}
else
cout<<sum+d;
}
int main()
{
base b;
cin>>b.m_year>>b.m_month>>b.m_day;
getSumDay(b.m_year, b.m_month, b.m_day);
return 0;
}
生日排序
#include<bits/stdc++.h>
using namespace std;
struct student
{
string name;
int m;
int d;
}a[111];
int n,c=0;
bool cmp(student x,student y)
{
if(x.m!=y.m)
return x.m<y.m;
if(x.d!=y.d)
return x.d<y.d;
if(x.name.size()!=y.name.size())
return x.name.size()<y.name.size();
return x.name<y.name;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].name>>a[i].m>>a[i].d;
}
sort(a,a+n,cmp);
for(int i=0;i<n-1;i++)
{
if(a[i+1].m==a[i].m && a[i+1].d==a[i].d)
{
c++;
cout<<a[i].m<<' '<<a[i].d<<' '<<a[i].name<<' ';
while(a[i+1].m==a[i].m && a[i+1].d==a[i].d)
{
i++;
cout<<a[i].name<<' ';
}
cout<<endl;
}
}
if(c==0)
cout<<"None";
return 0;
}