网页游戏大全找556pk游戏专业/郑州seo服务技术
这是我2017年8月底写完的练习题,那时还什么都不会,到现在看这种题已经特别简单了。不过还是有很长一段路要走啊。(你可能发现有两个抄袭的,source直接百度就能找到了…,想了很久都没想出来,自己写又全是BUG,入门还真是不容易呀。)这是给我自己看的总结,也算是重新思考一遍算法的思想吧。
0009 零崎的人间冒险Ⅰ
题意:就是很普通的递归汉诺塔
#include <stdio.h>
int main(){int n;void move(int n,char a,char b,char c);while(~scanf("%d\n",&n)){move(n,'A','B','C');printf("\n");}
}
void move(int n,char a,char b,char c){if(n==1)printf("%c to %c\n",a,c);else{move(n-1,a,c,b);printf("%c to %c\n",a,c);move(n-1,b,a,c);}
}
0010 零崎的人间冒险Ⅱ
设刚为A,怂为B,并将之看作加长字符串,根据题意A不能连续出现,那么我们有:
①如果在长度为i的字符串str加后缀A,那么str[i-1]不等于A
②如果在长度为i的字符串str加后缀B,那么str[i-1]为任意。
故这样的字符串个数设以A为结尾的有FA个,以B为结尾的有FB个,总共F个。
FA[1]=1,FB[1]=1
FA[n]=FB[n−1]
FB[n]=FA[n−1]+FB[n−1]=F[n−1]
F[n]=FA[n]+FB[n]=FB[n−1]+FA[n−1]+FB[n−1]=F[n−1]+F[n−2].
我们发现就是斐波那契数列…
#include <cstdio>
int main(){int i,n;unsigned long long f,x,y;while(~scanf("%llu",&n)){f=0;x=1;y=1;i=1;while(i<=n) {f=(x+y)%100007;x=y;y=f;i++;}printf("%llu\n",f%100007);}
}
0011 Let’s play a game
好吧,那时候作为刚接触程序设计的我冥思苦想半天,到网上找才知道这是基于博弈的思想,到现在来看已经比较简单啦。思想:搜索如果有能使对手进入必败态(2b,b)的取数字方法,对手就输了,反之进入下一轮(这里使用递归判断,迭代是写不出来的,相当于bfs了)
#include <stdio.h>
bool judge(int a, int b) {if (a < b) {a = b-a;b = b-a;a = a+b;}if (b == 0)return false;for (int i = a / b; i > 0; i--)if (judge(a - b*i, b) == false)return true;return false;
}int main() {int x, y;while (scanf("%d%d", &x, &y) != EOF)printf("%s\n", judge(x, y) ? "Nova" : "LaoWang");
}
0012 零崎的人间冒险Ⅲ
题目已经提示得很明显了,就不多说什么了。
#include <iostream>
#define mo 1000007
using namespace std;
int a[100005];
int horner(int* a,int x,int n){long long ans=0;for(int i=n;i+1;i--)ans=(ans*x+a[i])%mo;return ans;
}
int main(){int x,n;while(cin>>n>>x){for(int i=0;i<=n;i++)cin>>a[i];cout<<horner(a,x,n)<<endl;}
}
0014 Inverse number:Reborn
emmm这道题比较坑,不是坑在归并排序上,而是ans超过int,再加之自己没有好好思考是否用long long,导致一发失败了,这个M原本是用一个外置的tmp写的,以为自己写错了,借鉴了(基于ctrl+c的coding)网上的归并。
#include <stdio.h>
int a[1000005];long long ans;
void M(int left, int mid, int right){int l1=mid-left+1,l2=right-mid,L[l1+1],R[l2+1],l=0,r=0;for(int i=0;i<l1;i++)L[i]=a[left+i];for(int i=0;i<l2;i++)R[i]=a[mid+i+1];L[l1]=R[l2]=0xFFFFF;for(int i=left;i<=right;i++){if(L[l]<=R[r])a[i]=L[l++];else{a[i]=R[r++];ans+=l1-l;}}
}
void meg(int l,int r){if(l>=r)return ;int m=(l+r)>>1;meg(l,m);meg(m+1,r);M(l,m,r);
}
int main(){int n;while(~scanf("%d",&n)){ans=0;for(int i=0;i<n;i++)scanf("%d",&a[i]);meg(0,n-1);printf("%lld\n",ans);}
}
0015 零崎的人间冒险Ⅳ
排序模板题…根本不是最后的大BOSS啊喂//你甚至可以sort
#include <stdio.h>
int x[1000005];
void quick_sort(int* a,int left,int right){if(left>=right)return ;int pl=left,pr=right,tem=a[left],t;long long ans=0;while(pl<pr){while(a[pr]>=tem&&pl<pr)pr--;while(a[pl]<=tem&&pl<pr)pl++;t=a[pl];a[pl]=a[pr];a[pr]=t;}a[left]=a[pl];a[pl]=tem;quick_sort(a,left,pl-1);quick_sort(a,pl+1,right);
}
int main(){int i,n;while(scanf("%d",&n)==1){for(i=0;i<n;i++)scanf("%d",&x[i]);quick_sort(x,0,n-1);printf("%d",x[0]);for(i=1;i<n;i++)printf(" %d",x[i]);printf("\n");}
}