题单地址:http://oj.ecustacm.cn/viewnews.php?id=1021 持续更新
奇妙的数字【水】
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
bool check(int x)
{
LL sum1=x*x,sum2=x*x*x;
int cnt=0;
set<int>st;
while(sum1) st.insert(sum1%10),sum1/=10,cnt++;
while(sum2) st.insert(sum2%10),sum2/=10,cnt++;
if(cnt==10&&st.size()==10) return true;
return false;
}
int main(void)
{
for(int i=1;i<=100000;i++)
if(check(i)) {cout<<i;return 0;}
return 0;
}
加法变乘法【水】
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>>ve;
bool check(int l,int r)
{
int sum=0;
for(int i=1;i<=49;i++)
{
if(i==l||i==l+1) continue;
if(i==r||i==r+1) continue;
sum+=i;
}
sum+=l*(l+1)+r*(r+1);
return sum==2015;
}
int main(void)
{
for(int i=1;i<=47;i++)
for(int j=i+2;j<=48;j++)
if(check(i,j)) ve.push_back({i,j});
cout<<16;
return 0;
}
移动距离【水】
求坐标,算曼哈顿距离即可。
#include<bits/stdc++.h>
using namespace std;
int w,m,n;
int getx(int n)
{
int x=n/w;
if(n%w) x++;
return x;
}
int gety(int n,int x)
{
int y;
if(x%2)
{
int sum=n-(x-1)*w;
y=sum%(w+1);
}
else
{
int sum=n-(x-1)*w;
y=w-(sum%(w+1))+1;
}
return y;
}
int main(void)
{
while(cin>>w>>m>>n)
{
int x1=getx(m),x2=getx(n);
int y1=gety(m,x1),y2=gety(n,x2);
cout<<abs(x1-x2)+abs(y1-y2)<<endl;
}
return 0;
}
打印大X【水】
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m;
int main(void)
{
while(cin>>m>>n)
{
int st[N][N]={0};
for(int i=1;i<=n;i++)
{
for(int j=i,k=0;k<m;k++,j++) st[i][j]=1;
for(int j=n+m-1-i+1,k=0;k<m;k++,j--) st[i][j]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n+m-1;j++)
{
if(st[i][j]) cout<<'*';
else cout<<'.';
}
cout<<endl;
}
}
return 0;
}
牌型种数【dfs】
#include<bits/stdc++.h>
using namespace std;
int cnt=0;
void dfs(int index,int u)
{
if(u>13) return;
if(index==13)
{
if(u==13) cnt++;
return;
}
for(int i=0;i<=4;i++) dfs(index+1,u+i);
}
int main(void)
{
dfs(0,0);
cout<<cnt<<endl;
return 0;
}
|