7-1 计算物体下落的距离
思路: 演草纸计算,输出。
int main(){
printf("height = 45.00\n");
}
7-2 含有8的数字的个数
思路:暴力
int main(){
int a,b;scanf("%d%d",&a,&b);
int ans=0;
for(int i=a;i<=b;++i){
int res=i;
while(res){
if(res%10==8){
ans++;break;
}
res/=10;
}
}printf("%d\n",ans);
}
7-3 鸡兔同笼
思路:减去鸡,就是兔子。
int main(){
int n,m;scanf("%d%d",&n,&m);
printf("%d %d\n",n-((m-2*n)/2),(m-2*n)/2);
}
7-4 到底有多二
思路:暴力。
char s[MAXN];
int main(){
scanf("%s",&s);int len=strlen(s);
if(s[0]=='-'){
double ans;
if((s[len-1]-'0')%2==0)ans=3.0;
else ans=1.5;
int res2=0;
for(int i=1;i<len;++i){
if(s[i]=='2'){
++res2;
}
}ans*=((res2*1.0)/((len-1)*1.0));
printf("%.2lf%%\n",ans*100);
}
else{
double ans;
if((s[len-1]-'0')%2==0)ans=2.0;
else ans=1.0;
int res2=0;
for(int i=0;i<len;++i){
if(s[i]=='2'){
++res2;
}
}ans*=((res2*1.0)/((len)*1.0));
printf("%.2lf%%\n",ans*100);
}
}
7-5 大炮打蚊子
思路:暴力
int mp[25][25];
int fx[4]={0,0,-1,1},fy[4]={1,-1,0,0};
int n,m;
void debug(){
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
printf("%d",mp[i][j]);
}printf("\n");
}printf("\n");
}
int main(){
cin>>n>>m;
char ch;
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
cin>>ch;
if(ch=='#')mp[i][j]=2;
else mp[i][j]=0;
}
}int k,x,y;cin>>k;
while(k--){
cin>>x>>y;
int res=0;
if(mp[x][y]>0){
mp[x][y]=0;++res;
}
for(int i=0;i<4;++i){
int nx=x+fx[i],ny=y+fy[i];
//printf("%d %d\n",nx,ny);
if(mp[nx][ny]==1){
mp[nx][ny]=0;++res;
}
else if(mp[nx][ny]==2){
mp[nx][ny]=1;
}//debug();
}cout<<res<<endl;
}
}
7-6 一帮一
思路:顺序+倒序查找
int main(){
int n;cin>>n;
int sex[55];string name[55];
for(int i=1;i<=n;++i){
cin>>sex[i]>>name[i];
}int num=n;
for(int i=1;i<=n&&num>0;++i){
for(int j=n;j>=i;--j){
if((sex[i]==1&&sex[j]==0)||(sex[i]==0&&sex[j]==1)){
sex[i]=sex[j]=2;num-=2;
cout<<name[i]<<" "<<name[j]<<endl;
}
}
}
}
7-7 Left-pad
思路:水题
char s[101000];
int gets(){
char ch=getchar();int i=0;
while(ch=getchar()){
if(ch=='\n')return i;
s[i++]=ch;
}
}
int main(){
int n;char ch;cin>>n>>ch;
int len=gets();//cout<<len<<endl;
if(len>=n){
for(int i=len-n;i<len;++i){
cout<<s[i];
}cout<<endl;
}
else{
for(int i=1;i<=n-len;++i){
cout<<ch;
}cout<<s<<endl;
}
}
7-8 古风排版
思路:记录,结构体排序
const int MAXN=1e5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
const double PI=acos(-1.0);
struct node{
char ch;
int first,second;
node(char _ch='\0',int _first=0,int _second=0){
ch=_ch;first=_first;second=_second;
}
}ans[MAXN];
char s[MAXN];
int gets(){
char ch=getchar();int i=0;
while(ch=getchar()){
if(ch=='\n') return i;
s[i++]=ch;
}
}
int cmp(node a,node b){
if(a.first==b.first)
return a.second>b.second;
return a.first<b.first;
}
int main(){
int n;cin>>n;
int len=gets();
for(int i=0;i<len;++i){
ans[i]=node(s[i],i%n,i);
if(i==len-1&&i%n!=n-1){
while(i%n!=n-1){
++i;
ans[len++]=node(' ',i%n,i);
}
}
}sort(ans,ans+len,cmp);
for(int i=0;i<len;++i){
if(ans[i].first!=ans[i+1].first) cout<<ans[i].ch<<endl;
else cout<<ans[i].ch;
}
}
7-9 点赞狂魔
思路:map记录,结构体排序。
const int MAXN=1e4+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
const double PI=acos(-1.0);
struct node{
string name;
int kind,k;
}peo[MAXN];
map<int,int> mp;
int n;
int cmp(node a,node b){
if(a.kind==b.kind)
return a.k<b.k;
return a.kind>b.kind;
}
int main(){
cin>>n;
for(int i=1;i<=n;++i){
mp.clear();
cin>>peo[i].name>>peo[i].k;
int val,ecnt=0;
for(int j=1;j<=peo[i].k;++j){
cin>>val;
if(mp[val]==0){
mp[val]=++ecnt;
++peo[i].kind;
}
}
}sort(peo+1,peo+1+n,cmp);
if(n<3){
for(int i=1;i<=n;++i){
cout<<peo[i].name<<" ";
}cout<<"-";
for(int i=2;i<=3-n;++i){
cout<<" -";
}cout<<endl;
}
else{
cout<<peo[1].name<<" "<<peo[2].name<<" "<<peo[3].name<<endl;
}
}
7-10 列出连通集
思路:DFS,BFS板子
const int MAXN=5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
const double PI=acos(-1.0);
int mp[MAXN][MAXN];
int vis[MAXN],ans[MAXN];
int n,m,k;
void dfs(int u){
for(int i=0;i<n;++i){
if(vis[i]==0&&mp[u][i]==1){
vis[i]=1;
ans[k++]=i;
dfs(i);
}
}
}
void bfs(int u){
queue<int> que;que.push(u);vis[u]=1;
while(que.size()){
u=que.front();que.pop();
ans[k++]=u;
for(int i=0;i<n;++i){
if(vis[i]==0&&mp[u][i]==1){
que.push(i);vis[i]=1;
}
}
}
}
int main(){
cin>>n>>m;int a,b;
for(int i=1;i<=m;++i){
cin>>a>>b;
mp[a][b]=mp[b][a]=1;
}
for(int i=0;i<n;++i){
k=1;
if(vis[i]==0){
vis[i]=1;ans[k++]=i;
dfs(i);
cout<<"{";
for(int i=1;i<k;++i){
cout<<" "<<ans[i];
}cout<<" }"<<endl;
}
}clean(vis,0);
for(int i=0;i<n;++i){
k=1;
if(vis[i]==0){
vis[i]=1;ans[k++]=i;
bfs(i);
cout<<"{";
for(int i=2;i<k;++i){
cout<<" "<<ans[i];
}cout<<" }"<<endl;
}
}
}
7-11 部落
思路:简单并查集+map
const int MAXN=1e5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
const double PI=acos(-1.0);
int pre[MAXN];
map<int,int> mp;
int n;
void intt(){
for(int i=1;i<MAXN;++i){
pre[i]=i;
}mp.clear();
}
int Find(int x){
if(pre[x]==x) return x;
else return pre[x]=Find(pre[x]);
}
int main(){
intt();cin>>n;
int ecnt=0;
for(int i=1;i<=n;++i){
int k,first,peo;cin>>k;
for(int i=1;i<=k;++i){
cin>>peo;
if(mp[peo]==0)mp[peo]=++ecnt;
if(i==1){
first=peo;
}int aa=Find(mp[first]),bb=Find(mp[peo]);
if(aa!=bb){
pre[bb]=aa;
}
}
}int ans=0;
for(int i=1;i<=ecnt;++i){
if(pre[i]==i)ans++;
}cout<<ecnt<<" "<<ans<<endl;
int k,a,b;cin>>k;
while(k--){
cin>>a>>b;
if(Find(mp[a])==Find(mp[b])) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
}
7-12 素因子分解
思路:唯一分解定理
const int MAXN=1e5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
const double PI=acos(-1.0);
ll ans[MAXN][2];
ll n;
int main(){
cin>>n;ll res=n,k=0;
if(n==1){
cout<<"1=1"<<endl;
return 0;
}
for(ll i=2;i*i<=n;++i){
if(res%i==0){
int sum=0;
while(res%i==0){
res=res/i;++sum;
}ans[k][0]=i;ans[k++][1]=sum;
}
}
if(res>1){
ans[k][0]=res;ans[k++][1]=1;
}cout<<n<<"="<<ans[0][0];
if(ans[0][1]>1) cout<<"^"<<ans[0][1];
for(int i=1;i<k;++i){
cout<<"*"<<ans[i][0];
if(ans[i][1]>1) cout<<"^"<<ans[i][1];
}cout<<endl;
}
7-13 函数-斐波那契数列
思路:看题
const int MAXN=1e5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
const double PI=acos(-1.0);
double f[MAXN];
void intt(){
f[1]=1;f[2]=1;f[3]=2;
for(int i=4;i<=60;++i){
f[i]=f[i-1]+f[i-2];
}
}
int main(){
int n;intt();
while(~scanf("%d",&n)) printf("%.0lf\n",f[n]);
}
7-14 括号匹配
思路:栈
const int MAXN=1e5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
const double PI=acos(-1.0);
string s;
stack<char> stk;
int gets(){
char ch=getchar();int i=0;
while(ch=getchar()){
if(ch=='\n') return i;
s[i++]=ch;
}
}
int main(){
//int len=gets();//printf("%d\n",len);
getline(cin,s);int len=s.size();
//scanf("%s",s);int len=strlen(s);
while(!stk.empty()) stk.pop();
for(int i=0;i<len;++i){
if(s[i]=='('||s[i]==')'||s[i]=='{'||s[i]=='}'||s[i]=='['||s[i]==']'){
if(!stk.empty()){
char ch=stk.top();
if((ch=='{'&&s[i]=='}')||(ch=='('&&s[i]==')')||(ch=='['&&s[i]==']')){
stk.pop();continue;
}
}stk.push(s[i]);
}
}
if(!stk.empty()) printf("no\n");
else printf("yes\n");
}
7-15 反向数相加
思路:模拟
const int MAXN=1e5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
const double PI=acos(-1.0);
int main(){
int n;cin>>n;
for(int i=1;i<=n;++i){
ll a,b;cin>>a>>b;
int res1=a,res2=b,aa=0,bb=0;
while(res1){
aa=aa*10+res1%10;
res1/=10;
}
while(res2){
bb=bb*10+res2%10;
res2/=10;
}aa=aa+bb;
ll ans=0;
while(aa){
ans=ans*10+aa%10;
aa/=10;
}cout<<ans<<endl;
}
}