20240409
A. 疾病研究
注意,用printf输出%时,需要打两个%%。
注意变量初始化为0。
#include<bits/stdc++.h>
using namespace std;
int a[5],n,c;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>c;
if(c<=18) a[1]++;
if(19<=c&&c<=35) a[2]++;
if(36<=c&&c<=60) a[3]++;
if(c>60) a[4]++;
}
printf("%.2lf%%\n",double(a[1])/n*100);//百分数要*100
printf("%.2lf%%\n",double(a[2])/n*100);
printf("%.2lf%%\n",double(a[3])/n*100);
printf("%.2lf%%\n",double(a[4])/n*100);
//由于a[1~4]除以n时,两边都是整数,会导致直接整除,所以要进行类型转换,使其变成浮点数除法。
return 0;
}
B. 是否含有x个y
简单的数位分解问题,注意开long long。
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,x,y;
cin>>n>>x>>y;
int cnt=0;
while(n){
if(n%10==y) cnt++;
n/=10;
}
if(cnt==x) cout<<"YES";
else cout<<"NO";
return 0;
}
C. 幸运数字
由于数据范围很小,所以可以把所有涉及到的质数打表,也可以用判断素数的方法来做,这里标程直接打表。
#include<bits/stdc++.h>
using namespace std;
char s[110];
const int prime[25]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};//打表
int sum[26];//记录和
int main(){
int maxn=0,minn=110;//最大值和最小值,注意初始化
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;i++)
{
sum[s[i]-'a']++;
}
for(int i=0;i<26;i++)//遍历26个字母
{
if(sum[i]>maxn) maxn=sum[i];
if(sum[i]>0&&sum[i]<minn) minn=sum[i];//比较minn,注意不包括0
}
for(int i=0;i<25;i++){//遍历25个质数
if(maxn-minn==prime[i])
{
printf("Yes\n%d",maxn-minn);
return 0;
}
}
printf("No");//不满足的情况
return 0;
}
D. 圆环
本质上是在找在一个数后面的第一个比它大的数的位置,如果数据范围更大可以用单调栈,但这道题暴力也可以通过。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int a[1010];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
int t=0;
for(int j=i+1;j<=n;j++)
{
if(a[j]>a[i])
{
t=j;
break;
}
}
cout<<t<<endl;
}
return 0;
}
E. 折叠
枚举所有可能是答案的位置然后判断即可,注意不仅结点所在的位置可以折叠,两个结点之间也可以折叠,所以有可能在0.5的地方折叠。为了方便枚举,我们将所有结点的坐标*2,从1~2*l-1都可能是折叠的位置 。
#include<bits/stdc++.h>
using namespace std;
int n,l,p,r[20004],ans;
int main(){
cin>>n>>l;
for(int i=1;i<=n;i++)cin>>p,r[p*2]=1; //r数组表示这个位置有结点
for(int i=1;i<2*l;i++)//枚举位置,从1~2*l-1都可能是折叠的位置
{
int pd=1,s=0;//pd为是否可行,s为向两端扩张的长度
while(i>=s&&i+s<=2*l)//枚举两边是否相等
{
if(r[i-s]!=r[i+s])pd=0;
s++;
}
ans+=pd;
}
cout<<ans;
return 0;
}