A
相当于hello world,就是多了一个a控制一下个数
//A
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int a;
cin>>a;
for(int i=0;i<a-1;i++){
cout<<"AC ";
}
cout<<"AC"<<endl;
}
return 0;
}
B
排序
这数据量冒泡排序也能过
//B
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[20005];
int n;
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]<<" ";
}
return 0;
}
C
回文数,因为只有四位,用四个变量存该四位数的个、十、百、千位即可,然后遍历一遍1001~9999
//C
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,c,d;
for(int i=1001;i<=9999;i++){
a=i%10;//个位
b=(i%100)/10;//十位
c=(i%1000)/100;//百位
d=(i%10000)/1000;//千位
if(a==d&&b==c) cout<<i<<endl;
}
return 0;
}
D
01字串,输出128以内的二进制,可以直接开数组写二进制模拟,逢二进一。我就直接写了一个十转二的函数,偷懒了。
//D
#include<bits/stdc++.h>
using namespace std;
void stob(int num){
int n=num;
int k=0;
int a[7];
while(num>1){
a[k++]=num%2;
num/=2;
}
a[k]=num;
for(int i=6;i>k;i--){
cout<<0;
}
for(int i=k;i>=0;i--){
cout<<a[i];
}
cout<<endl;
}
int main(){
for(int i=0;i<=127;i++){
stob(i);
}
return 0;
}
E
小写转大写
第一个字母直接转,后面的看空格,空格后的第一个字母转大写。
输入要用getline(),一行字符串输入,可以包含空格。
然后正常写一直有点小错,就把输入放进while()里去了,这种oj判定能过,编译器就卡了
//E
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
string s;
while(getline(cin,s)){
s[0]-=32;
for(int i=1;i<s.size();i++){
if(s[i]==' ') s[i+1]-=32;
}
cout<<s<<endl;
}
return 0;
}
F
思维题
#include<bits/stdc++.h>
using namespace std;
int a[21][21];
int main(){
int t;
cin>>t;
while(t--){
int n,k;
cin>>n;
memset(a,0,sizeof(a));
vector<int> ve;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>k;
if(k==1&&a[j][i]==0&&i!=j) a[i][j]=1;
if(k==1&&a[j][i]==1&&i!=j) ve.push_back(i),ve.push_back(j);
}
}
sort(ve.begin(),ve.end());
for(int i=0;i<ve.size();i++){
cout<<ve[i]<<" ";
}
cout<<endl;
}
}
G
这是蓝桥杯里摘的题
思路一下就能看出来用递归,耐心点把An和Sn找到,就出来了。
//G
#include<bits/stdc++.h>
using namespace std;
void An(int n){
for(int i=1;i<=n;i++){
cout<<"sin("<<i;
if(i%2!=0&&i!=n){
cout<<"-";
}
if(i%2==0&&i!=n){
cout<<"+";
}
}
for(int i=0;i<n;i++){
cout<<")";
}
}
void Sn(int n){
int d=n;
for(int i=0;i<n-1;i++){
cout<<"(";
}
for(int i=1;i<=n;i++){
An(i);
cout<<"+"<<d;
if(d!=1) cout<<")";
d--;
}
}
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
Sn(n);
cout<<endl;
}
return 0;
}
H
这题说是最短路,边权有负,没有负环,数据范围也不大,用floyd就出了,可是测试样例一直没过,可能是自己对算法还没有足够理解。
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define M 1305
int maps[M][M];
int n,m;
int u,v,l;
void floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(maps[i][j]>maps[i][k]+maps[k][j]){
maps[i][j]=maps[i][k]+maps[k][j];
}
}
}
}
}
int main(){
int t;
cin>>t;
while(t--){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
maps[i][j]=INF;
}
maps[i][i]=0;
}
for(int i=0;i<m;i++){
cin>>u>>v>>l;
maps[u][v]=maps[v][u]=l;
}
floyd();
for(int i=2;i<=n;i++){
cout<<maps[1][i]<<endl;
}
}
return 0;
}
H*
出题人打错符号了,还是一个H,就叫它H*吧。
蓝桥杯小题——完美的代价。
//Hh 回文
#include<bits/stdc++.h>
using namespace std;
void solve(){
string s;
int n,j,cnt=0,flag=0,index;
cin>>n>>s;
int last=n-1;
for(int i=0;i<last;i++){
for(j=last;j>i;j--){
if(s[i]==s[j]){
for(int u=j;u<last;u++) s[u]=s[u+1];
s[last]=s[i];
cnt+=last-j;
last--;
break;
}
}
if(j==i&&(n%2==0||flag==1)){
cout<<"Impossible"<<endl;
return;
}else if(j==i){
flag=1;
index=i;
}
}
if(!flag) cout<<cnt<<endl;
else cout<<cnt+n/2-index<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
I
本场出了A最简单的题目,就第一行一个数,第二行两个数,第三行三个数…
自己定两个变量,一个控制行数,一个一直++。
//I
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int m;
cin>>m;
int k=1;
int p=1;
for(int i=1;i<=m;i++){
for(int j=1;j<=p;j++){
cout<<k++;
}
p++;
cout<<endl;
}
}
return 0;
}
J
找到区间直接排序取最大。
开了两个数组,一个初始,一个过渡。
//J
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n;
int a[1005];
memset(a,0,sizeof(a));
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int m;
int b[1005];
memset(b,0,sizeof(b));
cin>>m;
while(m--){
int l,r,K;
cin>>l>>r>>K;
for(int i=0,j=l;j<=r;j++,i++){
b[i]=a[j];
}
sort(b,b+r-l+1);
cout<<b[r-l-K+1]<<endl;
}
}
return 0;
}