https://ac.nowcoder.com/acm/contest/13493#rank

目录

  • A: 6的个数
  • B: 小明的作业
  • C: 斐波那契
  • D: 数列重组
  • E: 三角形个数
  • F: 字符串

A: 6的个数


https://ac.nowcoder.com/acm/contest/13493/A
签到题

#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
int sum=0;
using namespace std;
int main(void)
{for(int i=0;i<=2021;i++){int temp=i;while(temp){int t=temp%10;if(t==6) sum++;temp/=10;}}cout<<sum<<endl;return 0;
}

B: 小明的作业


https://ac.nowcoder.com/acm/contest/13493/B
唉,数的时候加错了,算成了68 25
正确答案是 78 和 25。
大致思路就是: 将wa转换成一个特殊的符号。aw也转换成一个特殊的符号 ;例如 &&
将其他的字符弄成空格。看输出的挨个数,&&是警告 长的例如&&&&就是错误的。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
using namespace std;
string a;
int sum1,sum2;
int main(void)
{/*cin>>a;cout<<endl<<endl;for(int i=0;i+1<a.size();i++){if(a[i]=='w'&&a[i+1]=='a'){a[i]='*';a[i+1]='*';i++;continue;}if(a[i]=='a'&&a[i+1]=='w'){a[i]='&';a[i+1]='&';i++;continue;}a[i]=' ';}cout<<a<<endl;*/cout<<78<<endl;cout<<25<<endl; return 0;
}


文件操作:
我上面的那种毕竟需要手数。不是纯编程的,那么我想了一下纯编程的。
才发现好麻烦。

文件操作有一个大坑,记住不要用笔记本的替换字符功能,太坑了。



大致思路就是,还是上面的处理操作。不过把输出的内容输出到一个文本。
我们从文本里读取处理后的字符串,统计个数。

处理字符的时候注意: wa 和 aw的变换字符要不相同。不然会问题。

例:  wawaaw
要处理为 &&&&**  要统一处理的话就是 &&&&&&  统计的结果明显是不同的
#include<cstdio>
#include<iostream>
#include<sstream>
#include<cstring>
using namespace std;
string a;
int sum1;
int sum2;
int main(void)
{/*cin>>a;//处理字符串for(int i=0;i+1<a.size();i++){if(a[i]=='w'&&a[i+1]=='a'){a[i]='*';a[i+1]='*';i++;continue;}if(a[i]=='a'&&a[i+1]=='w'){a[i]='&';a[i+1]='&';i++;continue;}a[i]=' ';}freopen("1.txt","w",stdout);//将处理好的字符串输出到我们的文件中 1.txtcout<<a<<endl;*/freopen("1.txt","r",stdin);//从文件中读取 统计个数getline(cin,a);int count1=0;//看读取了几个字符int count2=0;//卡读取了几个字符bool flag1=false;//判断读取到了bool flag2=false;//判断读取到了特殊字符for(int i=0;i<a.size();i++){if(a[i]=='&')//读取到了特殊字符{count1++;//计数加一flag1=true;//判断开始continue;}if(flag1&&a[i]!='&')//说明是&开头的字符,且这一串的&已经读取完了{if(count1>2) sum2++;//说明是一个连着的字符else sum1++;//说明是单个的字符count1=0;flag1=false;}if(a[i]=='*'){count2++;flag2=true;continue;}if(flag2&&a[i]!='*'){if(count2>2) sum2++;else sum1++;count2=0;flag2=false;}}cout<<sum1<<endl;cout<<sum2<<endl;return 0;
}


还是第一种香,方便。第二种容易出错。

C: 斐波那契


https://ac.nowcoder.com/acm/contest/13493/C
关键点: 在计算的时候要记得求分子和分母的最大共约数约分,不要会爆long long
我计算的时候是先打表 斐波那契前20项
再打表分母前13项。一边看一下有没有出错。
一边看一下,会不会爆long long 。
大致看了一下,一定会爆的。那么我们在每次两数相加的时候,通分一下就好了(即分子和分母同时除以两者的最大共约数)。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
using namespace std;
int a[20]={0,1,1};
int b[20];
long long int s1;
long long int s2;
long long int gcd(long long int a,long long int b)
{if(b==0) return a;return gcd(b,a%b);
}
int main(void)
{for(int i=3;i<=18;i++)//斐波那契数列 {a[i]=a[i-1]+a[i-2];}for(int i=1;i<=13;i++){b[i]=a[i]*a[i+1];//分母 }s1=1;//分子 s2=1;//分母 for(int i=2;i<=13;i++){s1=s1*b[i]+1*s2;s2=s2*b[i];long long int temp=gcd(s1,s2);//两者的最大共约数 s1=s1/temp;//通分 s2=s2/temp;//通分 } cout<<s1<<"/"<<s2<<endl;//cout<<6535086616739<<"/"<<3684083162760<<endl;return 0;
}

D: 数列重组


https://ac.nowcoder.com/acm/contest/13493/D
注意: 题目问的是有几种排列的方式。是全列列中,看有没有满足条件的。
我最开始以为是全排列后,再分不同的堆,不同的分法是不同种。好吧眼瞎了没有看提示。
本题用is_sort()函数及其的方便。感兴趣的可以搜一搜具体的用法。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
using namespace std;
int a[10]={2,5,3,6,3,6,7,3,7,8};
int ans;
int sum=0;
bool cmp(int a,int b)
{return a>b;
}
int main(void)
{sort(a,a+10);bool flag;do{flag=false;for(int i=0;i<8;i++){ for(int j=i+1;j<9;j++){if( ( is_sorted(a,a+i+1) || is_sorted(a,a+i+1,cmp) )&& ( is_sorted(a+i+1,a+j+1)||is_sorted(a+i+1,a+j+1,cmp) )&& ( is_sorted(a+j+1,a+10)||is_sorted(a+j+1,a+10,cmp) ) ) {flag=true;break;}}if(flag)break;}if(flag)ans++;}while(next_permutation(a,a+10));cout<<ans<<endl;return 0;
}

E: 三角形个数


https://ac.nowcoder.com/acm/contest/13493/E
数学问题,找规律,推出公式。

官方题解是这样的:

套公式看一下规律:

其实这个道题的大致思路:
就是看 从1~n边长的所有的 正着的三角形的个数和倒着的三角形的个数之和。
说实话,这规律我觉得不容易推,何况考试的时候紧张和慌不好找,建议记住大致的公式模板。

#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll ans=0;
ll m=1e9+7;
int main(void)
{   ll n=20210411;for(int i=1;i<=n;i++){ll a=(n-i+2)*(n-i+1)/2%m;//正三角型个数 if((n-2*i+1)>0) a=(a+(n-2*i+1)*(n-2*i+2)/2)%m;//倒着的三角形个数 ans=(ans+a)%m;}cout<<ans<<endl;return 0;
}

F: 字符串


https://ac.nowcoder.com/acm/contest/13493/F
挺简单的,不过考完后看了一下自己AC的代码,感觉写的真的垃圾。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
using namespace std;
int n;
string a[10005];
string str;
string cmp="@wyk";
int ans;
int main(void)
{scanf("%d",&n);getline(cin,str);for(int i=0;i<n;i++){getline(cin,a[i]);}for(int i=0;i<n;i++){for(int j=0;j<a[i].size();j++){bool flag=false;if(a[i][j]=='@'){int k=j+1;int w;for(w=1;w<=3;w++){if(a[i][k++]!=cmp[w])break;}if(w==4){flag=true;}}if(flag){ans++;break;}}}cout<<ans;return 0;
}

复盘的时候,一想 直接用string的find()函数它不爽么?

#include<cstring>
#include<string>
#include<cstdio>
#include<iostream>
using namespace std;
const int N=10010;
int n;
int ans;
string str[N];
string s="@wyk";
int main(void)
{cin>>n;char a=getchar();for(int i=0;i<n;i++) getline(cin,str[i]);for(int i=0;i<n;i++){if(str[i].find(s)!=string::npos)ans++; }cout<<ans<<endl;return 0;
}

其实可以一边输入,一边统计

#include<cstring>
#include<string>
#include<cstdio>
#include<iostream>
using namespace std;
int n;
int ans;
string str;
string s="@wyk";
int main(void)
{cin>>n;char a=getchar();for(int i=0;i<n;i++) {getline(cin,str);if(str.find(s)!=string::npos)ans++; }   cout<<ans<<endl;return 0;
}

官方题解也不错

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main(){int ans=0,n;cin>>n;getchar();for(int i=0;i<n;i++){string s;getline(cin,s);for(int j=0;j<s.size();j++){if(s[j]=='@'){if(s.substr(j,4)=="@wyk"){ans++;break;}}}}cout<<ans<<endl;return 0;
}

“九韶杯”河科院程序设计协会第一届程序设计竞赛 【前六题解析】相关推荐

  1. “九韶杯”河科院程序设计协会第一届程序设计竞赛题解

    A-6的个数 题意 ​ 2021中,出现了多少个数字6 思路 ​ for循环枚举对于每个数分解之后贡献答案就可以了 代码 #include <bits/stdc++.h> using na ...

  2. “九韶杯”河科院程序设计协会第一届程序设计竞赛 部分题解

    (大型翻车 A 602 #include<bits/stdc++.h> using namespace std; int main(){int sum=0;for(int i=6;i< ...

  3. “九韶杯”河科院 D.数列重组(含重复元素的全排列+构造方法)

    对于含有重复元素序列的全排列,为了再次排列后得到的序列中各不重复,需要用到c++中的do{}while(next_permutation(a,a+n))函数 对于判断每次排序后的序列是否符合条件,用到 ...

  4. 中南林科大软件协会第一届程序设计大赛作品报告

    软件协会第一届程序设计大赛 作品名称: 中南林业科技大学人员出入校管理系统 作 者: *** 填写日期: 2022.05.26 目  录 第二章 概要设计 第三章 详细设计 第四章 测试报告 第五章 ...

  5. 最大子矩阵和问题(“九韶杯” 最强对手矩阵、AW的西瓜田)

    最大子矩阵和问题就是在一个n*m的已知的全为数字的矩阵中,找到一个子矩阵,使这个矩阵各元素的和是所有子矩阵中最大的. 在我看来,这种类型的题分为两种类型: 1.固定了矩阵的长宽,求最大和: 2.没有固 ...

  6. 中学生python程序设计大赛_贵州民族大学第一届程序设计大赛圆满举办

    原标题:贵州民族大学第一届程序设计大赛圆满举办 为了推动和促进计算机程序设计艺术在校园内的推广与普及,提高同学们的逻辑分析能力.学习编程的兴趣.学生的创造力.团队合作精神以及实际动手能力,特举办贵州民 ...

  7. 北京区块链技术应用协会第一届第四次会员大会顺利召开

    2020年12月28日,依据<社会团体登记管理条例>和<北京区块链技术应用协会章程>.新冠肺炎疫情防控要求等规定,在北京市投资促进服务中心等单位领导的关怀指导下,北京区块链技术 ...

  8. 武汉工程大学第一届程序设计女生赛(牛客contest 4746)解题报告 Apare_xzc

    武汉工程大学第一届程序设计女生赛解题报告 xzc 2020.3.8 比赛链接:武汉工程大学第一届程序设计女生赛 A. Multiplication (101/861) 分析: 问x平方几次后就会> ...

  9. 众享比特未来融合研究院作为协会会员参加苏州市区块链技术和产业协会第一届第二次会员大会

    11月25日下午,苏州市区块链技术和产业协会第一届第二次会员大会顺利召开.众享比特未来融合研究院作为协会会员出席本次大会. 苏州市区块链技术和产业协会第一届第二次会员大会 苏州市区块链技术和产业协会成 ...

最新文章

  1. led灯光衰怎么解决_什么是LED光衰,光衰怎么解决?
  2. HPC System Design
  3. 区块链预言机(1)初识API网关
  4. Android 4.4.2 动态添加JNI库方法记录 (一 JNI库层)
  5. Linux Cpu 利用率计算
  6. 科学的分析猪八戒到底是什么猪,黑猪还是白猪?
  7. linux 文件大小总和,linux磁盘占用跟每个文件夹大小总和不符?
  8. Shell——传递参数
  9. 如何应对糟糕的面试官(2)
  10. mysql8.0.15免安装教程_MySQL8.0.15安装教程(Windows)
  11. 一步一步写算法(之 最大公约数、最小公倍数)
  12. 案例一(haproxy+keepalived高可用负载均衡系统)【转】
  13. PanGu-Coder:函数级的代码生成模型
  14. 百度笔试题--论坛数据库表设计
  15. 香港流行乐黄金二十年——经典歌手(音乐人)全面回顾 一
  16. Spark集群运行xgboost4j-spark总结
  17. 【情人节特别篇】想知道玫瑰在哪些城市最畅销嘛?
  18. powershell课后作业
  19. 微软宣布与神州数码合作希望利用区块链技术优化金融、电子商务、娱乐等行业!
  20. 自然语言处理中CNN模型几种常见的Max Pooling操作

热门文章

  1. Centos环境下部署游戏服务器-软件安装
  2. es6笔记2之解构赋值,rest和展开运算符
  3. Java-异常处理练习
  4. struts2静态方法和动态方法调用
  5. 基于Redis的分布式锁到底安全吗(上)?
  6. log4j无法显示mybatis sql
  7. android中使用哪种方式解析XML比較好
  8. 关于XML文档操作类
  9. This 在 C# 中的含义
  10. find = in a string