大佬求解!菜鳥實在弄不出來。(哭遼)
搗鼓了很久沒有得到想要的輸出。
不知道怎么才能同時在鏈表里輸入一行多個資料?
scanf為什么總是只能輸一次?
怎么將兩個鏈表里的資料相加得到第三個鏈表輸出?
謝謝大佬!
uj5u.com熱心網友回復:
for exampleint cm[100]={0};//假設最高不超100次冪
int max=0, c=0, m=0;
while(1) {//第一行輸入
scanf(“%d%d”, &c,&m);
if(c==0&&m==0) break;
cm[m] += c;
if (max<m) max=m;
}
while(1) {//第二行輸入
scanf(“%d%d”, &c,&m);
if(c==0&&m==0) break;
cm[m] += c;
if (max<m) max=m;
}
for (;cm[max]==0; max--);
//列印
if (cm[0]>0) printf(“%d”, cm[0]); //常數項
if (max>0) printf(“+”);
for(int i=1; i<max-1; i++) {
if(cm[i] > 0) {
printf(“%d*x^%d+” cm[i], i);
}
}
if (max>0) printf(“%d*x^%d” cm[max], max);
uj5u.com熱心網友回復:
改一個地方for(int i=1; i<max-1; i++) {
if(cm[i] != 0) { //這里改用不等
printf(“%d*x^%d+” cm[i], i);
}
}
uj5u.com熱心網友回復:
鏈表方式實作#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define EPSLON 1e-6
typedef struct Polynomial {
float coef; // 系數
int power; // 冪
struct Polynomial * next;
} Poly;
Poly * init() {
// 構造多項式,保留空頭
Poly * head = (Poly*) malloc ( sizeof(Poly));
head->next = NULL;
return head;
}
//
// 向鏈表當中插入一項
// 插入演算法保證 power小的在前面,大的在后面, 相同的就合并(合并后系數是0就摘除)
// 加減法都可以用這一個函式來實作
void insert(Poly* head, float coef, int power ) {
if (NULL==head) return;
Poly * p = head;
while ( p->next ) {
if ( power < p->next->power ) { // 插入
Poly * pT = (Poly*) malloc( sizeof(Poly));
pT->power = power;
pT->coef=coef;
pT->next = p->next;
p->next = pT;
return;
} else if ( power == p->next->power ) {
// 合并
if ( fabs( coef + p->next->coef ) < EPSLON ) {
// 合并后系數是0. float型別不能直接 == 來判斷
Poly* pT = p->next;
p->next = p->next->next;
free(pT);
return;
} else {
p->next->coef += coef;
return;
}
} else
p = p->next;
}
if ( p->next == NULL ) { // 到尾巴了,直接插入
p->next = (Poly*) malloc(sizeof(Poly));
p->next->power = power;
p->next->coef = coef;
p->next->next = NULL;
}
}
void printPoly(Poly * head) {
if (NULL == head ) return;
Poly * p = head;
while (p->next) {
if ( head->next == p->next)
printf("%g*x^%d", p->next->coef, p->next->power);
else
printf("+%g*x^%d", p->next->coef, p->next->power);
p = p->next;
}
}
int main() {
Poly * head;
head = init();
while (1) {
float coef; int power;
scanf("%f %d", &coef, &power);
if ( power !=0 && fabs(coef)>EPSLON)
insert(head, coef, power);
else
break;
}
while (1) {
float coef; int power;
scanf("%f %d", &coef, &power);
if ( power !=0 && fabs(coef)>EPSLON)
insert(head, coef, power);
else
break;
}
printPoly(head);
return 0;
}
沒怎么測驗,自己測吧
uj5u.com熱心網友回復:
謝謝大佬!( °?° )
uj5u.com熱心網友回復:
謝謝大佬!( °?° )
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/119951.html
標籤:新手樂園
