- 测试
2025/7/26测试 题解
- @ 2025-7-26 9:28:03
T1: 一道简单的模拟题,直接暴力打1,3,5都可以。
#include<bits/stdc++.h>
using namespace std;
int main(){
char a;
cin>>a;
cout<<" "<<a<<endl<<" "<<a<<a<<a<<endl<<a<<a<<a<<a<<a;
return 0;
}
T2: 简单的打擂台活动,用cnt记录当前值。当然也可以用排序来做。 下面给出两种做法:
#include<bits/stdc++.h>
using namespace std;
int n , a[100010] , k;
int main()
{
cin >> n >> k;
for(int i = 0 ; i < n ; i++)
{
int t;
cin >> t;
a[t]++;
}
int m = 0;
for(int i = 0 ; i < 100010 ; i++)
{
if(a[i] != 0)
{
m++;
if(m == k)
{
cout << i;
return 0;
}
}
}
cout << "NO RESULT";
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,k,a[10005];
int main(){
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int ans=unique(a,a+n)-a;
if(k<ans){
cout<<a[k-1];
}else{
cout<<"NO RESULT";
}
return 0;
}
T3:排序
#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
int n;
int a[100005];
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
}
T4:二进制、模拟的题 先计算二进制数中有多少位,再用1&n计算最后一位是否为1,循环将n>>=1;(右移一位)
开long long
#include<bits/stdc++.h>
#define ull long long
using namespace std;
ull n,c;
int g=0;
ull tot;
int main(){
scanf("%lld",&n);
c=n;
while(c>=1){
c/=2;
tot++;
}
for(int i=tot;i>=1;i--){
if(n>=1){
if(n&1){
g++;
}
n>>=1;
}
}
double ans=g*100.0/tot;
printf("%.1lf%%",ans);
}
T5: CSP-J 2023原题,一道模拟; 每次k-=ceil(k*1.0/3);
#include<bits/stdc++.h>
using namespace std;
int a,k=0,day1=1,day2=1;
int main(){
cin>>a;
k=a;
int pd=1;
if(a%3==1){
day2=1;
pd=0;
}
while(true){
if(pd==1) day2++;
k-=ceil(k*1.0/3);
if(k%3==1) pd=0;
day1++;
if(k==1) break;
}
cout<<day1<<" "<<day2;
return 0;
}
附加题:高精度加法模版,模拟竖式加法的进位,将每一位通过数组存储起来。
#include<bits/stdc++.h>
using namespace std;
int x[110000],y[110000],c[11000000],T;
char str1[110000],str2[110000];
int n1,n2;
int main()
{
cin>>T;
while(T--){
memset(x,0,sizeof(x));//置空数组x,y,c
memset(y,0,sizeof(y));
memset(c,0,sizeof(c));
cin>>str1;//读入加数
cin>>str2;//读入被加数
n1=strlen(str1);//长度
n2=strlen(str2);
int lena=n1;
int lenb=n2;
int jw=0;
for(int i=0;i<lena;i++) x[i]=str1[lena-1-i]-'0';//倒序存储
for(int i=0;i<lenb;i++) y[i]=str2[lenb-1-i]-'0';
int len=max(lena,lenb);//为了防止出现漏项
for(int i=0;i<len;i++)
{
c[i]=x[i]+y[i]+jw;//jw为进位
jw=c[i]/10;
c[i]%=10;//为了防止出现重复加操作
}
if(jw==1) cout<<1;//如果进位为1,那么就输出1
for(int i=len-1;i>=0;i--) cout<<c[i];
cout<<"\n";
}
}
1 comments
-
diqiuonlinerenji LV 1 @ 2025-7-26 9:29:18坏
- 1