该程序涉及要求利用单链表数据结构存储多项式,因此要用到单链表的定义,初始化,输入输出等基本操作。
定义一个typedef struct Node2的结构体,结构体中包含有整型的指数、浮点型的系数和结构体指针next。另外定义结构体变量Node2和结构体指针PNode2,在后面的代码中会用到这两个来实现各函数的小功能。
typedef int DataType;//定义DataType为int 类型
typedef struct Node2{
float xishu;//系数
int zhisu;//指数
struct Node2 *Next;//结构指针
}Node2;
typedef struct Node2* PNode2;
在程序的主页面首先会提示输入第一个多项式的数据(最后输入0,0来结束数据输入),输完之后会把输入的数据按指数大小从小到大排列显示出来,接着提升输入第二个多项式的数据,并按指数大小从小到大显示出来,最后显示两个多项式 相加的结果。
1、多项式的加法运算,代码功能的主体,这只是部分代码:
//多项式的加法计算
void add_poly(Node2 *pa,Node2 *pb){
Node2 *p=pa->Next;
Node2 *q=pb->Next;
Node2 *pre=pa;
Node2 *u;
{
2、多项式按照指数大小排序,小的排在最前面,大的排在后面:
//多项式按照指数大小排序
void insertNewPoint_link(PNode2 head,PNode2 qNode){
PNode2 p=head;
while (p->Next!=NULL)
{
if (p->Next->zhisu>qNode->zhisu)
{
qNode->Next=p->Next;
p->Next=qNode;
break;
}
p=p->Next;
}
if (p->Next==NULL)
{
p->Next=qNode;
}
}
3、主函数,程序开始执行的部分和整个程序的控制部分:
int main(){
int zhishu;
float xishu;
PNode2 head1=(PNode2)malloc(sizeof(struct Node2));
PNode2 head2=(PNode2)malloc(sizeof(struct Node2));
PNode2 tem=NULL;
head1->Next=NULL;
head2->Next=NULL;
printf("输入链表一的系数和指数,如:3,2 以0,0结束输入:\n");
scanf("%f,%d",&xishu,&zhishu);
while (xishu!=0||zhishu!=0)
{
tem=(PNode2)malloc(sizeof(struct Node2));
tem->xishu=xishu;
tem->zhisu=zhishu;
tem->Next=NULL;
insertNewPoint_link(head1,tem);
scanf("%f,%d",&xishu,&zhishu);
}
printf("链表一按指数升序排序后的多项式为:\n");
printLinkeLink(head1);
printf("\n");
printf("输入链表二的系数和指数,如:3,2 以0,0结束输入:\n");
scanf("%f,%d",&xishu,&zhishu);
while (xishu!=0||zhishu!=0)
{
tem=(PNode2)malloc(sizeof(struct Node2));
tem->xishu=xishu;
tem->zhisu=zhishu;
tem->Next=NULL;
insertNewPoint_link(head2,tem);
scanf("%f,%d",&xishu,&zhishu);
}
printf("链表二按指数升序排序后的多项式为:\n");
printLinkeLink(head2);
printf("\n");
add_poly(head1,head2);
printf("多项式相加后的结果为:\n");
printLinkeLink(head1);
}
收藏点赞关注后,私信我获取
#include
using namespace std;
typedef long long ll;
const int N = 2e5+10;
int w[N];
int n;
ll T;
int main()
{
scanf("%d%lld",&n,&T);
for(int i=0;i<n;i++) scanf("%d",&w[i]);
ll res=0; // 最后的糖果数量
while(1)
{
ll cnt=0,sum=0; // cnt 这一圈购买的糖果数量,sum 这一圈花的钱
for(int i=0;i<n;i++)
if(sum+w[i]<=T)
{
cnt++;
sum += w[i];
}
if(!cnt) break; // 如果不能买任何糖果了就break
res += T / sum * cnt; //优化:如果当前钱可以让其再走完与上面相同的钱和糖果数,就让其走到不能走为止
T %= sum;
}
printf("%lld\n",res);
return 0;
}
// 时间复杂度 O(nlog(T))
/*
每一次T最少除以2
sum <= T
1. sum > T/2 ,T % sum = T-sum < T/2;
2. sum < T/2 ,T % sum < sum < T/2;
*/
#include
#include
#define int long long
using namespace std;
inline int read(){
int w=0,x=0;char ch;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return w?-x:x;
}
int dep[500005],size[500005];
int fa[500005],dis[500005],son[500005],top[500005];
struct edge{
int to,l;
edge(int to,int l) :to(to),l(l){}
};
vector <edge > e[500005];
int n=3;
int g,h;
void add(int u,int v,int len){
e[u].push_back(edge(v,len));
e[v].push_back(edge(u,len));
}
void dfs1(int now,int f){
dep[now]=dep[f]+1,fa[now]=f;
size[now]=1;
for(int i=0;i<e[now].size();i++){
int to=e[now][i].to,l=e[now][i].l;
if(to==f) continue;
dis[to]=dis[now]+l;
dfs1(to,now);
size[now]+=size[to];
if(size[to]>size[son[now]]) son[now]=to;
}
}
void dfs2(int x,int y){
top[x]=y;
if(son[x]) dfs2(son[x],y);
for(int i=0;i<e[x].size();i++){
int to=e[x][i].to;
if(to==son[x]||to==fa[x]) continue;
dfs2(to,to);
}
}
int lca(int x,int y){
while(top[x]!=top[y]){
if(dep[top[x]]<dep[top[y]]) swap(x,y);
x=fa[top[x]];
}
return dep[x]<dep[y]?x:y;
}
int getdis(int x,int y){
return dis[x]+dis[y]-2*dis[lca(x,y)];
}
signed main(){
g=read(),h=read();
add(1,2,g),add(1,3,h);
dfs1(1,0);
dfs2(1,1);
cout<<getdis(2,3);
return 0;
}
噫吁嚱,危乎高哉!蜀道之难,难于上青天!蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。
问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜!连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!
剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!