c語言程序問題,!急急急急?。,。,。,?!
請(qǐng)大佬幫忙看一下!,!
7-2 愿天下有情人都是失散多年的兄妹(25 分)
呵呵,。大家都知道五服以內(nèi)不得通婚,即兩個(gè)人最近的共同祖先如果在五代以內(nèi)(即本人,、父母,、祖父母、曾祖父母,、高祖父母)則不可通婚,。本題就請(qǐng)你幫助一對(duì)有情人判斷一下,他們究竟是否可以成婚,?輸入格式:輸入第一行給出一個(gè)正整數(shù)N(2 ≤N≤104),,隨后N行,每行按以下格式給出一個(gè)人的信息:本人ID 性別 父親ID 母親ID其中ID是5位數(shù)字,,每人不同,;性別M代表男性、F代表女性,。如果某人的父親或母親已經(jīng)不可考,,則相應(yīng)的ID位置上標(biāo)記為-1。接下來給出一個(gè)正整數(shù)K,,隨后K行,,每行給出一對(duì)有情人的ID,,其間以空格分隔。注意:題目保證兩個(gè)人是同輩,,每人只有一個(gè)性別,,并且血緣關(guān)系網(wǎng)中沒有亂倫或隔輩成婚的情況。輸出格式:對(duì)每一對(duì)有情人,,判斷他們的關(guān)系是否可以通婚:如果兩人是同性,,輸出Never Mind;如果是異性并且關(guān)系出了五服,,輸出Yes,;如果異性關(guān)系未出五服,輸出No,。
#include<stdio.h>#include<stdlib.h>#include<string.h>#define SIZE 10000#define TRUE 1#define FALSE 0typedef struct CSNode{ int id; char sex; int data; struct CSNode *father; struct CSNode *mother;}CSNode,CSTree[SIZE];typedef struct SonTree{ int id1; int id2;}S,Son[SIZE];CSTree* createCSTree(int n){ CSTree cs; int i; for (i = 0; i < n; i++) {scanf_s("%d %c %d %d", &cs[i].id, &cs[i].sex, &cs[i].father->id, &cs[i].mother->id);} return cs;}int FindParent(CSNode s1,CSNode s2){ if (s1.father != s2.father&&s1.mother != s2.mother) {return TRUE; } else {return FALSE; }}int match(CSTree parent, Son son, int n,int k){ int match = TRUE; int i; for (i = 0; i < n; i++) {if (son[i].id1==parent[i].id){ for (int j = i + 1; j < n; j++) {if (son[j].id2 == parent[j].id){ if (parent[i].sex == parent[j].sex) {printf("Never Mind"); } else {if (FindParent(parent[i],parent[j])){ match = TRUE; if (FindParent(parent[i], parent[j])) {match = TRUE;if (FindParent(parent[i], parent[j])){ match = TRUE; if (FindParent(parent[i], parent[j])) {match = TRUE;if (FindParent(parent[i], parent[j])){ match = TRUE; printf("Yes");
}else{ match = FALSE;}
} else {match = FALSE; }
}else{ match = FALSE;}
} else {match = FALSE; }}else{ match = FALSE; printf("No"); break;} }} }} }}int main(){ CSTree *x; int N; scanf_s("%d", &N); x=createCSTree(N); int K; scanf_s("%d", &K); Son son; int i; for (i = 0; i < K; i++) {scanf_s("%d %d", &son[i].id1, &son[i].id2); } match(x, son, N, K); system("pause"); return 0;}
程序有N多問題
一般OJ用的是gcc編譯器,你的scanf_s不一定支持,且你的參數(shù)是錯(cuò)的
scanf_s參數(shù)與標(biāo)準(zhǔn)的scanf不一樣的
還有,你的循環(huán)中定義變量,這個(gè)是C99才支持的
你的return cs;也有兩個(gè)問題,一是類型不對(duì),二是返回了局部變量
最大的問題是
你的
scanf_s("%d %c %d %d", &cs[i].id, &cs[i].sex, &cs[i].father->id, &cs[i].mother->id);}
中,你的
cs[i].father
cs[i].mother
沒有申請(qǐng)內(nèi)存,是野指針
也就是說,你數(shù)據(jù)結(jié)構(gòu)是有問題的
不知道怎么下手改了
給你找了個(gè)網(wǎng)上的參考(c++的)
應(yīng)該是不容易寫的,,這個(gè)題目有點(diǎn)太大了啊。,。,。