问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++编程题,关于数据结构的.急用。。。

发布网友 发布时间:2023-04-29 13:54

我来回答

3个回答

热心网友 时间:2023-11-03 11:10

基本约瑟夫问题:m个人围成一圈,隔k退出圈子,直到只胜一个人
基本解法:1.循环队列的模拟
2.递推,记f[m,k]为m个人,间隔k时候的最后一个人在最初的编号(从0编号)
容易得到递推式子f[1,k]=0;f[m,k]=(f[m-1,k]+k)%m

下面是我写的高精 + - * / 都有
#include <string>
#include <cstdlib>
using namespace std;

const int maxn=1005;
struct item{
int s[maxn],L;
item(){
L=1;memset(s,0,sizeof(s));
}
item(char *S){
L=strlen(S);
for(int i=1;i<=L;++i)
s[i]=S[L-i]-'0';
}
void init(){
char S[maxn];
gets(S);L=strlen(S);
for(int i=1;i<=L;++i)
s[i]=S[L-i]-'0';
}
void out(){
for(int i=L;i>=1;--i)
printf("%i",s[i]);
printf("\n");
}
};
item operator+(item s,int c){
for(int i=1;i<=s.L;++i){
c=s.s[i]+c;
s.s[i]=c%10;
c=c/10;
}
while(c>0){
s.s[++s.L]=c%10;
c=c/10;
}
return s;
}
item operator+(item &a,item &b){
item s;
s.L=max(a.L,b.L);
for(int i=1;i<=s.L;++i)
s.s[i]=a.s[i]+b.s[i];
return s+0;
}
item operator*(item s,int m){
if(m==0)
return item();
for(int i=1;i<=s.L;++i)
s.s[i]=s.s[i]*m;
return s+0;
}
item operator*(item &a,item &b){
item s;
s.L=a.L+b.L-1;
for(int i=1;i<=a.L;++i)
for(int j=1;j<=b.L;++j)
s.s[i+j-1]+=a.s[i]*b.s[j];
return s+0;
}
bool operator>(item &a,item &b){
int L=max(a.L,b.L);
for(int i=L;i>=1;--i)
if(a.s[i]>b.s[i])
return true;
else if(a.s[i]<b.s[i])
return false;
return false;
}
bool operator>=(item &a,item &b){
int L=max(a.L,b.L);
for(int i=L;i>=1;--i)
if(a.s[i]>b.s[i])
return true;
else if(a.s[i]<b.s[i])
return false;
return true;
}
item operator-(item s,int b){
for(int i=1;i<=s.L;++i){
b=s.s[i]-b;b=-b;
int x=(9+b)/10;
s.s[i]=10*x-b;
b=x;
}
while(s.L>1&&s.s[s.L]==0)--s.L;
return s;
}
item operator-(item &a,item &b){
item s;
s.L=a.L;
for(int i=1;i<=s.L;++i)
s.s[i]=a.s[i]-b.s[i];
return s-0;
}
item div(item m,int n,int &d){
for(int i=m.L;i>=1;--i){
d=d*10+m.s[i];
m.s[i]=d/n;
d=d%n;
}
while(m.L>1&&m.s[m.L]==0)--m.L;
return m;
}
item div(item a,item b,item &d){
for(int i=a.L;i>=1;--i){
d=d*10;
d=d+a.s[i];
item data;
int j;
for(j=1;j<=10;++j){
data=data+b;
if(data>d)break;
}
data=data-b;
d=d-data;
a.s[i]=j-1;
}
while(a.L>1&&a.s[a.L]==0)--a.L;
return a;
}
int main(){
item a,b,d;
a.init();
b.init();
div(a,b,d).out();
d.out();
system("pause");
return 0;
}

热心网友 时间:2023-11-03 11:10

找一本数据结构的习题书,里面有很多的

热心网友 时间:2023-11-03 11:11

课程设计吧- -

热心网友 时间:2023-11-03 11:10

基本约瑟夫问题:m个人围成一圈,隔k退出圈子,直到只胜一个人
基本解法:1.循环队列的模拟
2.递推,记f[m,k]为m个人,间隔k时候的最后一个人在最初的编号(从0编号)
容易得到递推式子f[1,k]=0;f[m,k]=(f[m-1,k]+k)%m

下面是我写的高精 + - * / 都有
#include <string>
#include <cstdlib>
using namespace std;

const int maxn=1005;
struct item{
int s[maxn],L;
item(){
L=1;memset(s,0,sizeof(s));
}
item(char *S){
L=strlen(S);
for(int i=1;i<=L;++i)
s[i]=S[L-i]-'0';
}
void init(){
char S[maxn];
gets(S);L=strlen(S);
for(int i=1;i<=L;++i)
s[i]=S[L-i]-'0';
}
void out(){
for(int i=L;i>=1;--i)
printf("%i",s[i]);
printf("\n");
}
};
item operator+(item s,int c){
for(int i=1;i<=s.L;++i){
c=s.s[i]+c;
s.s[i]=c%10;
c=c/10;
}
while(c>0){
s.s[++s.L]=c%10;
c=c/10;
}
return s;
}
item operator+(item &a,item &b){
item s;
s.L=max(a.L,b.L);
for(int i=1;i<=s.L;++i)
s.s[i]=a.s[i]+b.s[i];
return s+0;
}
item operator*(item s,int m){
if(m==0)
return item();
for(int i=1;i<=s.L;++i)
s.s[i]=s.s[i]*m;
return s+0;
}
item operator*(item &a,item &b){
item s;
s.L=a.L+b.L-1;
for(int i=1;i<=a.L;++i)
for(int j=1;j<=b.L;++j)
s.s[i+j-1]+=a.s[i]*b.s[j];
return s+0;
}
bool operator>(item &a,item &b){
int L=max(a.L,b.L);
for(int i=L;i>=1;--i)
if(a.s[i]>b.s[i])
return true;
else if(a.s[i]<b.s[i])
return false;
return false;
}
bool operator>=(item &a,item &b){
int L=max(a.L,b.L);
for(int i=L;i>=1;--i)
if(a.s[i]>b.s[i])
return true;
else if(a.s[i]<b.s[i])
return false;
return true;
}
item operator-(item s,int b){
for(int i=1;i<=s.L;++i){
b=s.s[i]-b;b=-b;
int x=(9+b)/10;
s.s[i]=10*x-b;
b=x;
}
while(s.L>1&&s.s[s.L]==0)--s.L;
return s;
}
item operator-(item &a,item &b){
item s;
s.L=a.L;
for(int i=1;i<=s.L;++i)
s.s[i]=a.s[i]-b.s[i];
return s-0;
}
item div(item m,int n,int &d){
for(int i=m.L;i>=1;--i){
d=d*10+m.s[i];
m.s[i]=d/n;
d=d%n;
}
while(m.L>1&&m.s[m.L]==0)--m.L;
return m;
}
item div(item a,item b,item &d){
for(int i=a.L;i>=1;--i){
d=d*10;
d=d+a.s[i];
item data;
int j;
for(j=1;j<=10;++j){
data=data+b;
if(data>d)break;
}
data=data-b;
d=d-data;
a.s[i]=j-1;
}
while(a.L>1&&a.s[a.L]==0)--a.L;
return a;
}
int main(){
item a,b,d;
a.init();
b.init();
div(a,b,d).out();
d.out();
system("pause");
return 0;
}

热心网友 时间:2023-11-03 11:10

找一本数据结构的习题书,里面有很多的

热心网友 时间:2023-11-03 11:11

课程设计吧- -
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
容易发财的房地产中介公司名字 我想对自己的房子进行房产评估,去哪里办理,需要... 改字体的时候不小心改错了,全变成格仔了怎么办 手机文件不小心改错名字了怎么办 女生每天早晚各跑步一个小时,配合饮食,一个月瘦多少? 每天早晚各慢跑一小时.一个月能瘦多少斤 爱剪辑怎么去水印 给视频去水印方法 游戏本关机时可以晃吗? 笔记本玩游戏CPU温度高,会花屏 打剑网三一小时声音大,发热,还能继续吗? 急急急!!!数据结构编程题:写一个程序,将输入的十进制数据M 转换为八进制数据M8,将其调试通过…… 枯径的成语枯径的成语是什么 两许的解释 禄俸的诗句禄俸的诗句是什么 汇齐的网络解释汇齐的网络解释是什么 混成的网络解释混成的网络解释是什么 混一的网络解释混一的网络解释是什么 混并的网络解释混并的网络解释是什么 PCN和ECN的区别是什么? 西门子s7通讯单个循环周期多少 武林夜市什么时候开市? 双色球好久开售106期 福彩好久开市 毛线沟中药市场好久放假重庆 国寿鑫禧宝年金保险多久领一次生存金 国寿鑫禧宝年金保险3年交保10年得多少钱 求用ccc编程的有价值的小项目可以锻炼自己能力的我想锻炼自己 担心牵挂一个人的说说 有借有还歌词说明了什么?表达了啥?谁知道 有借有还什么意思 这是数据结构线性表的一个编程题,那个高手能按要求给改动一下,谢了啊! 张树明是什么职务?潍柴重机独立董事 荡风的词语荡风的词语是什么 描写春天的四字词语有多少? 梦见抓鱼了好大一条鱼的预兆 之前下载了空间宝然后开了秒赞,不知道空间怎么就被禁言了,怎么办 从贵州安顺寄快递到重庆巫山要多长时间 10年前qq的动态视频能找回吗 杜尔伯特是几线城市 餐厅周年庆活动策划方案【三篇】 什么是杜尔伯特草原文化 信用卡自助活动餐饮方案名称有哪些 户口是杜尔伯特的可以去海伦上高中吗? 奔驰s450l用了什么发动机 奔驰s450l雨刷尺寸 一般买一对玉的吊坠需要多少钱啊,在淘宝网上看见的情侣玉吊坠有一百多的二百多的,是真玉吗 哪位大神帮看看这玉值多少钱? 回乡下发朋友圈的精美句子 适合发朋友圈农村的句子2020 新农合报销比例怎么算公式