A:小猿口算大赛
#include <iostream>
typedef long long LL;
using namespace std;
int main()
{
/* 水题*/
LL a,b;
for(int i=0;i<10;i++){
cin>>a>>b;
if(a>b)cout<<">\n";
else if(a<b)cout<<"<\n";
else cout<<"=\n";
}
cout<<"caijiuduolian\n";
return 0;
}
B:九九乘法表
#include<iostream>
using namespace std;
int main()
{
/* 简单题
* 使用双重循环输出即可
* 注意不要多输出制表符,制表符只在两个算式之间存在
*
* 或者也可提前写好输出的字符串,在使用循环进行输出(具体可参考代码二)
* */
int n;
cin>>n;
if(n>0&&n<10){
for (int i = 1; i <= n; i++)
{
for(int j = 1;j<=i; j++){
cout<<i<<'*'<<j<<'='<<i*j;
if(j!=i)cout<<"\t";
}
cout<<"\n";
}
}
else if(n<=0){
cout<<"n is too small!\n";
}
else {
cout<<"n is too large!\n";
}
return 0;
}
/*
//代码二
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
char str[9][1000]={ {"1*1=1\n"},
{"2*1=2\t2*2=4\n"},
{"3*1=3\t3*2=6\t3*3=9\n"},
{"4*1=4\t4*2=8\t4*3=12\t4*4=16\n"},
{"5*1=5\t5*2=10\t5*3=15\t5*4=20\t5*5=25\n"},
{"6*1=6\t6*2=12\t6*3=18\t6*4=24\t6*5=30\t6*6=36\n"},
{"7*1=7\t7*2=14\t7*3=21\t7*4=28\t7*5=35\t7*6=42\t7*7=49\n"},
{"8*1=8\t8*2=16\t8*3=24\t8*4=32\t8*5=40\t8*6=48\t8*7=56\t8*8=64\n"},
{"9*1=9\t9*2=18\t9*3=27\t9*4=36\t9*5=45\t9*6=54\t9*7=63\t9*8=72\t9*9=81\n"} };
if(n>0&&n<10){
for (int i = 0; i < n; i++)
{
for(int j=0;str[i][j]!='\0';j++){
cout<<str[i][j];
}
}
}
else if(n<=0){
cout<<"n is too small!\n";
}
else {
cout<<"n is too large!\n";
}
return 0;
}
*/
C:空心菱形
#include<iostream>
using namespace std;
int main()
{
/* 简单题
* 使用双重循环输出菱形
* */
int n;
char c;
while(1){
cin>>n;
if(n==0)break;
cin>>c;
for(int i=1;i<(n+1)/2;i++){
for(int j=0;j<(n+1)/2-i;j++){
cout<<' ';
}
cout<<c;
for(int j=1;j<(i-1)*2;j++){
cout<<' ';
}
if(i!=1)cout<<c;
cout<<'\n';
}
for(int i=(n+1)/2;i<=n;i++){
for(int j=0;j<i-(n+1)/2;j++){
cout<<' ';
}
cout<<c;
for(int j=1;j<(n-i)*2;j++){
cout<<' ';
}
if(i!=n)cout<<c;
cout<<'\n';
}
}
return 0;
}
D:zmx下象棋
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int x1,y1,x2,y2;
/* 中档题
* 输出小兵需要走的步数
* 小兵行走的步数为横坐标之差加上纵坐标之差。
* 输出Error的情况
* 当终点在小兵坐标下方时小兵必定无法走到输出"Error!"
* 当终点在我方棋盘上时小兵不能横向行走,此时横坐标不相等即可输出"Error!"*/
int t;
char c;
cin>>t;
while(t--){
cin>>c>>x1>>c>>y1>>c;
cin>>c>>x2>>c>>y2>>c;
if(y2<=4&&x2!=x1||y2<y1){
cout<<"Error!\n";
}
else{
cout<<y2-y1+abs(x1-x2)<<'\n';
}
}
return 0;
}
E:比例简化
#include <iostream>
using namespace std;
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
int main(){
/* 思维题
* 中档题
* 因A/B<=L<=100
* 直接枚举答案,跟据题意进行筛选即可*/
double A,B,L,a,b,res=1000000;
cin>>A>>B>>L;
double C=A/B;
for(int i=0;i<=L;i++){
for(int j=1;j<=L;j++){
double temp=(double)i/j;
if(temp-C<0)continue;
if(gcd(i,j)!=1)continue;
if(temp-C<res)res=temp-C,a=i,b=j;
}
}
cout<<a<<' '<<b<<'\n';
return 0;
}
F:yyx数树叶
#include <iostream>
using namespace std;
int main(){
/* 数学推理题
* 中档题
* 直接计算会超过LL范围,所以不能直接计算
* 注意到x^x与x的奇偶性一致,所以此题的意思等价于求k加到n的值sum的奇偶性
* 此时如果使用for循环计算仍然可能爆超时,所以直接用等差数列求和公式计算其和sum
* 再判断一下sum的奇偶性即可*/
int t,n,k;
cin>>t;
while(t--){
cin>>n>>k;
int sum=0;
sum=(n-k+1+n)*k/2;
if(sum%2==0)cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}
G:cxk
#include <iostream>
using namespace std;
int main()
{
int x;
cin>>x;
if(x>=250) { cout<<
" &.-@@\n"
" &....@@\n"
" .-..=\n"
" ..-\\.\n"
" $$$$$$$-\n"
" %# $$$$ $$$$B$ $$$$$\n"
" ..####$$$$$$$ $@$B$$ $$$$$$$$\n"
" #######$$$$$$B@@@$$$$$$$$$$$$$$\n"
" ####### .$$$$$$ $$$$$= $$$$\n"
" ####%## B$$$$$$$$&&& $$$\n"
" B= $$$$$$ $$$$ $$$\n"
" BBB#&@%%% $$$\n"
" BBBBBBBB%% -..\n"
" %BBBBBBBBB . --\n"
" %BBBBBBBBBBB\n"
" BBBB&%BBBBB%\n"
" BBBBB% BBBBB\n"
" BBBBB BBBBB\n"
" BBBB BBBBB\n"
" BBB%. BBBB%\n"
" BB%%% BBBB%\n"
" B%%%& BB%%&\n"
" %%%% %%%\n"
" %%%% @@\n"
" %%B$ @@&\n"
" $$$$ &--\n"
" B@@$$$$ h&@\n";
}
else if(x>25&&x<250)cout<<"sing\n";
else if(x==25)cout<<"jump\n";
else if(x<25&&x>-25)cout<<"rap\n";
else cout<<"basketball\n";
return 0;
}
H:不同角度
#include <iostream>
#include <string>
using namespace std;
int main ()
{
/* 思维题
* 中档题
*
* 题目来源:蓝桥题库
* https://www.lanqiao.cn/problems/19949/learning/
* */
int t;
string s;
cin>>t;
while(t--){
cin>>s;
if(s=="0")cout<<"1";
else cout<<s<<"0";
cout<<' ';
int len=s.size();
int i=0;
for(;i<len;i++){
if(s[i]!='9'){
cout<<s[i]-'0'+1;
break;
}
cout<<s[i];
}
if(i==len)cout<<'0';
cout<<'\n';
}
return 0;
}
I:找到最小操作
#include<iostream>
using namespace std;
int main(){
/* 进制转换 n的k进制
* 中档题
* 找到最小操作等价于将n转化k进制,再将k进制的每位数加起来即可得到最小操作*/
int str[100];
int t,n,k,i,cnt;
cin>>t;
while(t--){
i=0,cnt=0;
cin>>n>>k;
if(k==1)cout<<n<<'\n';
else{
while(n){
str[i]=n%k;
n/=k;
i++;
}
for(int j=i-1;j>=0;j--){
cnt+=str[j];
}
cout<<cnt<<'\n';
}
}
return 0;
}
J:买可乐
#include <iostream>
#include <algorithm>
typedef long long LL;
using namespace std;
const LL MAX=200010;
LL t,n,k;
LL arr[MAX];
int main ()
{
/* 防AK题,因用到了数组与排序
* 数学推理
* 从小到大排序后每次全体减去最小的剩余次数
*
* 坑:
* 1、数据量大,算法时间复杂度高会超时
* 2、于是用了乘法,但是会爆longlong,于是在此基础上用减法
* 3、输出需判断是否合法,不合法不输出
*
* 题目来源:980 Div.2
* https://codeforces.com/contest/2024/problem/B
*
* */
cin>>t;
while(t--){
cin>>n>>k;
LL temp=k;
for(LL i=0;i<n;i++){
cin>>arr[i];
}
sort(arr,arr+n);
LL ans=0;
LL pre=0;
for(LL i=0;i<n;i++)
{
LL diff = arr[i]-pre;
if(k-(n-i)*diff <=0){
ans += k;
k=0;
break;
}
else
{
ans += (n-i)*diff + 1;
k -= (n-i)*diff;
}
pre=arr[i];
}
if(ans<temp)continue;
cout<<ans<<'\n';
}
return 0;
}
///参考代码二
/*
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
LL T,n,k;
const int N=200010;
LL arr[N];
int main(){
freopen("input.in","r",stdin);
freopen("output.out","w",stdout);
cin>>T;
while(T--) {
cin >> n >> k;
for (int i = 1; i <= n; i++)cin >> arr[i];
sort(arr + 1, arr + n + 1);
LL res = 0;
for (int i = 1; i <= n; i++) {
if (k <= (n - i+1) * (arr[i] - arr[i - 1])) {
cout << res + k << endl;
break;
}
res += (n - i+1) * (arr[i] - arr[i - 1]) + 1, k -= (n - i+1) * (arr[i] - arr[i - 1]);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}*/