小白之旅【2】
Czk_zekun2013 · · 休闲·娱乐
开篇
第一册前言
又来,好烦!在作业不多不少的情况下,我仰望天...啊,我想啥呢? \
画火柴人从幼儿园就开始了,那时是小烂画。每次都叠厚厚一本。\
2022年又画了 《末日求生》 和 《小白日记1-124》,而今天,我又来搞事了! \
《小白历险记》 ! \
这是我第一次写文章类的"漫画"\
起初就是
小白冲着脑残的精神来到了一个c++世界,开始踏上NOI之旅。\
【第一册】
\
我又回来啦!\
放暑假(忍不了)\
第二季开始啦!\
还是那样脑残\
\ \ \ ————
第七章 初出新手峡谷
{ \textcolor{green} {\textbf {达成成就:新的地图!}}}
你已解锁中级地图 \ 中级地图:\
"打开了!"\ 随即出现一道光柱。\ "看来打开所有宝箱就可以解锁圣坛了!"\ 接下来是木宝箱。\ 木宝箱上出现了一行字:\ "请你帮忙算谁拿了多少奖学金。"\ \ \ \ 又又来到编程题了,快打开吧!\ 打开\ \ \ \ \ \ 相信你已经做完了,成功又打开了宝箱!\ 答案:
#include <bits/stdc++.h>
using namespace std;
int n;
struct student{
int s,c,t;
}a[305];
int cmp(student a, student b) {
if(a.total != b.total)
return a.t > b.t;
if(a.c!=b.c)
return a.c>b.c;
return a.s<b.s;
}
int main() {
cin >> n;
for (int i=0;i<n;i++) {
int math,english;
cin>>a[i].c>>math>>english;
a[i].t=a[i].c+math+english;
a[i].s=i+1;
}
sort(a,a+n,cmp);
for (int i=0;i<5;i++){
cout<<a[i].s<<" "<<a[i].t<<endl;
}
return 0;
}
sort()进阶!
sort中可以引用排序规则。只需在第二个需要引用的数后面加一个,再加入自定义函数即可。注意:函数必须是bool类型的。
{ \textcolor{green} {\textbf {达成成就:打开水宝箱!}}}
随即又出现一道光柱。已经集齐两个了。\ 接下来是水宝箱。\ 水宝箱上出现了一行字:\ "请你帮忙算谁拿了最多奖学金。"\ \ \ \ 又又来到编程题了,快打开水宝箱吧!\ 打开\ \ \ \ \ \ 相信你已经做完了,成功又打开了宝箱!\ 答案:
#include <iostream>
#include <algorithm>
using namespace std;
struct student{
string name;
char c_g;
char e_c;
int end_f;
int class_f;
int money__;
int page;
int h;
};
struct student a[110];
bool comp(student a,student b){
if(a.money__>b.money__ || (a.money__ == b.money__ && a.h<b.h)){
return true;
}else{
return false;
}
}
int main(){
int n,end=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].name>>a[i].end_f>>a[i].class_f>>a[i].c_g>>a[i].e_c>>a[i].page;
a[i].h=i;
if(a[i].class_f>80 && a[i].c_g=='Y'){
a[i].money__+=850;
}
if(a[i].end_f>80){
if(a[i].end_f>85 && a[i].e_c=='Y'){
a[i].money__+=1000;
}
if(a[i].page>=1){
a[i].money__+=8000;
}
if(a[i].class_f>80){
if(a[i].end_f>85){
a[i].money__+=4000;
}
}
if(a[i].end_f>90){
a[i].money__+=2000;
}
}
end+=a[i].money__;
}
sort(a,a+n,comp);
cout<<a[0].name<<endl<<a[0].money__<<endl<<end;
return 0;
}
{ \textcolor{green} {\textbf {达成成就:打开火宝箱!}}}
随即又出现一道光柱。已经集齐三个了。\ "hoooo!"\ 接下来是火宝箱了。\ 火宝箱上也出现了一行字:\ "有一行数,求怎么拼出来的数最大。"\ \ \ \ 又又又来到编程题了,快打开火宝箱吧!\ 打开\ \ \ \ \ \ 相信你已经做完了,成功又打开了宝箱!\ 答案:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
bool c(string x,string y){
return x+y>y+x;
}
int main(){
int m;
string a[510];
cin>>m;
for(int i=0;i<m;i++){
cin>>a[i];
}
sort(a,a+m,c);
for(int i=0;i<m;i++){
cout<<a[i];
}
cout<<endl;
return 0;
}
{ \textcolor{green} {\textbf {达成成就:打开土宝箱!}}}
"呼!"\ "只剩最后一个宝箱了!"\ 来到土宝箱了。\ 土宝箱:\ "有n个地毯,求坐标x,y最上边是几号地毯。"\ \ 来到编程题了,快打开最后一个宝箱吧!\ kuai \ \ \ \ \ \ 相信你已经做完了,成功又打开了宝箱!\ 答案:\
#include <iostream>
using namespace std;
int ditan[10010][4];
int s,x,y;
int main(){
cin>>s;
for(int i=1;i<=s;i++){
for(int j=0;j<4;j++){
cin>>ditan[i][j];
}
}
cin>>x>>y;
int i;
for(i=s;i>0;i--){
if(x>=ditan[i][0] && y>=ditan[i][1] && x<=ditan[i][0]+ditan[i][2] && y<=ditan[i][1]+ditan[i][3]){
cout<<i;
break;
return 0;
}
}
if(i==0){
cout<<"-1";
}
return 0;
}
多维数组!
多维数组就是在数组中装数组。\ 例:\
int a[100][233];
【hahaah】
第八章 计算大陆
{ \textcolor{green} {\textbf {达成成就:初级密码!}}}
"我们被传送到了计算大陆!"\ 突然,一根柱子从天而降。\ "pong..."\ "差点砸到我了!"\ "请你计算超大数加法和减法!破开密码"\ \ \ \ 又来到编程题了,快解开密码吧!\ 解开1\ 解开2\ \ \ \ \ 相信你已经做完题目了,成功解开了密码!\ 答案(1)c++:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string A,B;
int a[1000],b[1000],c[1000];
int main(){
cin>>A>>B;
int len=max(A.length(),B.length());
for(int i=A.length()-1,j=0;i>=0;i--,j++){
a[j]=A[i]-'0';
}
for(int i=B.length()-1,j=0;i>=0;i--,j++){
b[j]=B[i]-'0';
}
for(int i=0;i<len;i++){
c[i]+=a[i]+b[i];
if(c[i]>=10){
c[i]-=10;
c[i+1]+=1;
}
}
if(c[len]>0){
len++;
}
for(int i=len-1;i>=0;i--){
cout<<c[i];
}
cout<<endl;
return 0;
}
答案(2):
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string A,B;
int a[20000],b[20000],c[20000];
bool compare(string A,string B){
if(A.length()>B.length()){
return true;
}else if(B.length()>A.length()){
return false;
}if(A>=B){
return true;
}else if(B>A){
return false;
}
}
int main(){
cin>>A>>B;
int len=max(A.length(),B.length());
for(int i=A.length()-1,j=0;i>=0;i--,j++){
a[j]=A[i]-'0';
}
for(int i=B.length()-1,j=0;i>=0;i--,j++){
b[j]=B[i]-'0';
}
if(compare(A,B)){
for(int i=0;i<len;i++){
//c[i]+=a[i]-b[i];
c[i]+= a[i]-b[i];
if(c[i]<0){
c[i]+=10;
c[i+1]-=1;
}
}
}else{
cout<<"-";
for(int i=0;i<len;i++){
//c[i]+=a[i]-b[i];
c[i]+= b[i]-a[i];
if(c[i]<0){
c[i]+=10;
c[i+1]-=1;
}
}
}
for(int i=len-1;i>0;i--){
if(c[i]==0){
len--;
}else{
break;
}
}
for(int i=len-1;i>=0;i--){
cout<<c[i];
}
cout<<endl;
return 0;
}
高精度!
高精度有四步:\
- 输入字符串并倒序转换成整型数组
- 循环计算每一位,注意进位
- 减法要退位去零,加法要考虑最后一位进位
- 再倒序输出数组
loading...
{ \textcolor{green} {\textbf {达成成就:解开锁链!}}} "这边有楼梯!"\ ......\ "有许多铁链!"\ 铁链锁着一把钥匙。\ 又是久违的石柱。\ 石柱很轻,但直接砸到了小白头上。\ "A!"\ 石柱:\ "请计算大数a*b!"\ 又来到编程题了,快来解开锁链吧!\ jisuan \ \ \ \ \ \ \ 相信你已经做完了,成功解开了锁链!\ 答案:
#include<iostream> #include<cstdio> #include<string> const int maxn = 5000; using namespace std; int a[maxn], b[maxn], c[maxn]; int main() { string A,B; cin>>A>>B; int lena=A.length(),lenb=B.length(); for(int i=lena-1;i>=0;i--) a[lena-i]=A[i]-'0'; for(int i=lenb-1;i>=0;i--) b[lenb-i]=B[i]-'0'; for(int i=1;i<=lena;i++){ for(int j=1;j<=lenb;j++){ c[i+j-1]+=a[i]*b[j]; } } int len=lena+lenb; for(int i=1;i<=len;i++){ c[i+1]+=c[i]/10; c[i]%=10; } while(c[len]==0) len--; for(int i=max(1,len);i>=1;i--){ printf("%d",c[i]); } return 0; }注意
这里乘法要输出的数组长度一定是输入两个数的长度之和左右。
{ \textcolor{green} {\textbf {达成成就:打开大门!}}} "获得了钥匙!"\ 而旁边有一个宝箱。\ "可以打开宝箱了!"\ "里面又是一个密码锁!"\ 上面写着:\ "请求出a/b!"\ \ \ 又来到编程题了,快来解开密码锁吧!\ 解开\ \ \ \ \ \ \ \ \ 相信你已经做完了,成功解开了密码锁!\ 答案:
#include<iostream> #include<cmath> #include<string> using namespace std; const int maxn = 5050; int a[maxn],c[maxn],len,flag=0; long long b,q; string A; int main() { cin>>A>>b; len=A.length(); for(int i = 0; i <len ; i++) a[i] = A[i] - '0'; for(int i=0;i<len;i++){ q=q*10+a[i]; c[i]=q/b; q%=b; } for(int i=0;i<len;i++){ if(c[i]!=0){ flag=1; } if(i==len-1){ flag=1; } if(flag==1){ cout<<c[i]; } } return 0; }a/b
{ \textcolor{green} {\textbf {达成成就:解锁武器!}}} "打开了大门!"\ 大门里又是箱子。\ "里面又是一个箱子!"\ "aaaaaaaa!"\ 石柱:\ "请求出
\sum_{i = 1}^{n} i! "\ \ \ \ \ \ 又来到编程题了,快来打开箱子吧!\ \ 打开箱子 \ \ \ \ \ \ \ \ 相信你已经做完了,成功打开了箱子!\ 答案:#include <iostream> #include <string> using namespace std; int s[155],t[155],ans,n; int main() { cin>>n; t[1]=1; for(int i=1;i<= n;i++) { for(int j=1;j<=150;j++) { t[j]=t[j]*i; } for(int k=1;k<=150;k++) { t[k+1]+=t[k]/10; t[k]=t[k]%10; } for(int k=1;k<=150;k++) { s[k]=s[k]+t[k]; s[k+1]+=s[k]/10; s[k]=s[k]%10; } } int flag=0; for(int i=150;i>=1;i--) { if(s[i]){ flag=1; } if(flag){ cout<<s[i]; } } }三周月快乐!
ha
第九章 斐波小村
{ \textcolor{green} {\textbf {达成成就:进入小村!}}} 解锁了一把武器!\ "还是一把枪!"\ 走着走着,就进入了一个小村。\ "斐波小村"\
【loading...】
村子里空无一人。中心有一个石柱,上面写满了斐波那契数列。\ 地上浮现了一道题:\ "请计算
F_n! "\ \ 又来到编程题了,快来解开题目吧!\ kuai\ \ \ \ \ \ \ \ 相信你已经解开题目了!\ \ 答案(自):#include <iostream> using namespace std; int main(){ long n,ans=1,x=0; cin>>n; for(long i = 1;i<n;i++){ long k=ans; ans+=x; x=k; } if(n==0){ cout<<"0.00"; return 0; } cout<<ans<<".00"; return 0; }斐波那契数列
斐波那契数列是一种数列。求式为
f(n)=f(n-1)+f(n-2) 。{ \textcolor{green} {\textbf {达成成就:扒开破网!}}} "这中间有洞穴!"\ 走进去,里面是潮湿的石柱。\ 突然,一个网朝小白扑去。\ "A!"小白被扑到在地。\ 而网异常坚固,拔都拔不开。\ 这时,石柱上出现了文字:\ "请你求出斐波纳契数列的第t项。"\ \ 又来到编程题了,快来解开题目吧!\ kuai \ \ \ \ \ \ \ \ 相信你已经解开题目了,解开了网!\ 答案(字):
#include <iostream> using namespace std; int fib(int x){ if(x==1||x==2) return 1; else return fib(x-1)+fib(x-2); } int n,a[100]; int main() { cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<n;i++){ cout<<fib(a[i])<<endl; } return 0; }{ \textcolor{green} {\textbf {达成成就:打开铁门!}}} "hoooo!"\ "这里有一个密室!"\ 进入密室,里面是一把铁剑和一个密码锁,旁边有一个铁门。\ "快打开密码锁!"\ 此时,无论怎么密码锁拔都拔不开。\ "石柱又出现了!"\ "小K想爬楼梯,请帮忙算出有多少种走法。"\ \ 又来到编程题了,快来解开题目吧!\ kuai\ \ \ \ \ \ 相信你已经解开题目了,解开了密码锁,打开了铁门!\ 答案:
#include <iostream> using namespace std; int main(){ int n,x,a[100005]; cin>>n>>x; a[0]=1; a[1]=1; for(int i = 2;i<=n;i++){ if(i<=x){ a[i]=(a[i-1]*2)%100003; }else{ a[i]=(2*a[i-1]-a[i-x-1])%100003; } } if(n==0){ cout<<"0"; return 0; } cout<<(a[n]+100003)%100003; return 0; }第十章 陨石洞穴
{ \textcolor{green} {\textbf {达成成就:进入洞穴!}}} 小白进入了陨石洞穴。\ "好大的洞穴!"\ "这里有一个牌子!"\ "男左女右。"\ "走左边。"\ 前边又有一个牌子。\ "又有一个牌子!"\ 牌子上面写着:"给出n个数,求加起来得到的素数的有多少种?"\ \ \ 又来到八八八八编程题了,快来写出代码吧!\ 快!\ \ \ \ \ \ \ \ \ 相信你已经完成题目了,成功解出了题目!\ 答案(本人):
#include <iostream> using namespace std; int n,w[50],a[50],k,ans=0,mm=0; bool isprime(int n){ if(n==2 || n==3){ return true; } if(n%2==0 || n==0 || n==1){ return false; } for(int i=3;i*i<=n;i+=2){ if(n%i==0) return false; } return true; } int stc(int A[]){ int sans=0; for(int i=0;i<=49;i++){ sans+=A[i]; } return sans; } void dfs(int pos,int &he){ if(pos==n+1){ if(isprime(he) && stc(a)==k){ ans++; } return; } for(int i=0;i<2;i++){ a[pos]=i; if(a[pos]==1){ int hes=he+w[pos]; dfs(pos+1,hes); }else{ dfs(pos+1,he); } } } int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ scanf("%d",&w[i]); } dfs(1,mm); printf("%d",ans); return 0; }新算法! dfs
dfs代表深度优先搜索。它按照"一条道走到头"的原理展开搜索并结合回溯。适用于枚举和搜索图和树。基本代码如下:
void dfs(int pos){ if(/*跳出条件*/){ /*结算此结果*/ return;//回溯 } for(int i=0;i</*道路总数*/;i++){ dfs(/*pos能到的节点*/); } }{ \textcolor{green} {\textbf {达成成就:神秘大门!}}} "呼!"\ 在牌子旁突然闪现一座大门。\ "这大门是什么时候出来的?"\ 结果大门被锁了。\ "又来!该怎么打开呢?"\ 就在此时,地上出现了血腥的字体:\ "请帮助机器猫选择要吃的食物。"\ \ \ 又来到编程题了,快来打开大门吧!\ 打开大门\ \ \ \ \ \ \ 相信你已经做完题目了,成功打开了神秘大门!\ 答案(本人):\
#include <iostream> using namespace std; int n,w[50],a[50],lo,hi,ans=0,mm=0; void dfs(int pos,int &he){ if(pos==n+1){ if(he>=lo && he<=hi){ ans++; } return; } for(int i=0;i<2;i++){ a[pos]=i; if(a[pos]==1){ he+=w[pos]; if(he<=hi){ dfs(pos+1,he); } he-=w[pos]; }else{ dfs(pos+1,he); } } } int main(){ scanf("%d%d%d",&n,&lo,&hi); for(int i=1;i<=n;i++){ scanf("%d",&w[i]); } dfs(1,mm); printf("%d",ans); return 0; }{ \textcolor{green} {\textbf {达成成就:大熊突袭!}}} 第十一章 史诗山洞
{ \textcolor{green} {\textbf {达成成就:打开石门!}}} { \textcolor{green} {\textbf {达成成就:打开石门!}}} { \textcolor{green} {\textbf {达成成就:打开石门!}}} 第十二章 难题开始
{ \textcolor{green} {\textbf {达成成就:打开石门!}}} 小白之旅2完结啦!目前行数:877,字数:13308。感谢收看!
小白之旅3