P1017 (NOIP2000 提高组)进制转换
题意:设计一个程序,读入一个十进制数和一个负进制数的基数, 并将此十进制数转换为此负进制下的数。
分析:-15转化为-2进制如下:
对于余数k,负进制-r,余数的范围为(-r+1,0),因为余数不能小于0,进行k=(k-(-r))%r的操作,余数k的范围变为(0,r-1)。符合要求。每次取余后原数应变为(n-k)/r,因为被除数=除数*商+余数,商=(被除数-余数)/除数。
#includeusing namespace std; int a[100000]; int main( ) { int n,r,p=0,k,q; cin>>n>>r; q=n; while(n!=0) { k=n%r; k=(k-r)%r; a[p++]=k; n=(n-k)/r; } cout< =0;i--) { if(a[i]>9) cout<P1019 (NOIP2000 提高组)单词接龙
题意:单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast 和 astonish,如果接成一条龙则变为 beastonish,另外相邻的两部分不能存在包含关系,例如 at 和 atide 间不能相连。分析:考虑到用DFS,分析见代码
#include#include using namespace std; string s[25]; int n,gs[25],len=0;//len为最长的长度 char ch; void dfs(string str,int l)//str为单次接龙的前一个单次,l为当前长度 { len=max(len,l); for(int i=0; i >n; for(int i=0; i >s[i]; gs[i]=2; } cin>>ch; for(int i=0; i



