2016年江西理工大学C语言程序设计竞赛(初级组)

时间:2023-03-08 20:25:50
2016年江西理工大学C语言程序设计竞赛(初级组)

问题 A: 木棒根数

解法:把所有的情况保存下来,加一下就好

#include<bits/stdc++.h>
using namespace std;
map<char,int>q;
class P
{
public:
int cmd(string s)
{
int sum=;
for(int i=;i<s.length();i++)
{
sum+=q[s[i]];
}
return sum;
}
};
int main()
{
string s;
P solve;
q['']=;
q['']=;
q['']=;
q['']=;
q['']=;
q['']=;
q['']=;
q['']=;
q['']=;
q['']=;
q['+']=;
q['-']=;
q['=']=;
cin>>s;
cout<<solve.cmd(s)<<endl;
return ;
}

问题 B: 一个苹果都不给我

解法:三种情况,单独买,套装买,和混合买

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n,m,p,q,ans[];
cin>>n>>m>>p>>q;
ans[]=n*m;
ans[]=n/p*q+(n%p)*m;
ans[]=(n/p+)*q;
sort(ans,ans+);
cout<<ans[]<<endl;
return ; }

问题 C: LED

解法:保存图形,然后xjb搞

include<stdio.h>
#include<string.h>
int main()
{
char num1[]={" _ _ _ _ _ _ _ _ "};
char num2[]={"| | | _| _||_||_ |_ ||_||_|"};
char num3[]={"|_| ||_ _| | _||_| ||_| _|"};
char str,a[]={"\0"};
int i,k,j,len;
scanf("%s",a);
len=strlen(a);
for(i=;i<len;++i)
{
j=a[i]-'';
k=j*;
printf("%c%c%c",num1[k],num1[k+],num1[k+]);
}
printf("\n");
for(i=;i<len;++i)
{
j=a[i]-'';
k=j*;
printf("%c%c%c",num2[k],num2[k+],num2[k+]);
}
printf("\n");
for(i=;i<len;++i)
{
j=a[i]-'';
k=j*;
printf("%c%c%c",num3[k],num3[k+],num3[k+]);
}
printf("\n");
return ;
}

问题 D: 路是自己选的

解法:应该都看出奇偶性关系了,一种是利用二进制,一种是二分,结果需要倒过来输出,所以使用了栈

#include<bits/stdc++.h>
using namespace std;
const int MAXN=;
int b[MAXN];
int main()
{
int x;
int a[];
scanf("%d",&x);
for(int i=;i<;i++)
{
scanf("%d",&a[i]);
b[a[i]]=i;
}
int u=b[x];
u=+u;
stack<char> s;
while(u!=)
{
if(u%==) s.push('L');else s.push('R');
u=u/;
}
while(!s.empty())
{
putchar(s.top());
s.pop();
}
puts("");
return ;
}

问题 E: All roads lead to rome

解法:标准解法是dp,然而可以用组合数学来做,也就是C(n,m)

#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n,m,l,r;
int a,b,c,d,ans=;
cin>>n>>m>>a>>b>>c>>d;
l=abs(a-c),r=abs(d-b);
for(int i=l+r;i>l;i--){
ans=ans*i/(l+r-i+);
}
cout<<ans<<endl;
}

问题 F: 找不到北

解法:求最短路最好利用bfs,当然dfs也能做到(一道基础的搜索题)

#include<bits/stdc++.h>
using namespace std;
int inf=(<<)-;
int Mx;
char m[][]={
"##########",
"#**#***#*#",
"#*#**##*##",
"#***##***#",
"##**#*#**#",
"#***#*#**#",
"#**#*****#",
"#****###*#",
"#***#**#*#",
"##########",
};
int a,b,c,d;
void dfs(int x,int y,int s)
{
if(m[x][y]=='#')
{
return;
}
else if(x==c&&y==d)
{
Mx=min(Mx,s);
}
s++;
m[x][y]='#';
dfs(x,y-,s);
dfs(x,y+,s);
dfs(x+,y,s);
dfs(x-,y,s);
m[x][y]='*';
}
int main()
{
int t;
cin>>t;
while(t--)
{
Mx=inf;
cin>>a>>b>>c>>d;
if(m[a][b]=='#'||m[c][d]=='#')
{
cout<<"-1"<<endl;
continue;
}
else if(a==c&&b==d)
{
cout<<""<<endl;
continue;
}
else
{
dfs(a,b,);
if(Mx==inf)
{
cout<<"-1"<<endl;
}
else
{
cout<<Mx<<endl;
}
}
}
return ;
}