一个c语言的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个c语言的问题相关的知识,希望对你有一定的参考价值。

请用c语言而不是c++解决(请尽快,11号晚8点前,更快会有加分)
有n个学生. 每个学生都有自己的宗教信仰,可能相同,也可能不同。一个调查机构想弄清楚宗教信仰的总数。但是,直接询问可能会使人不快,于是,调查机构决定询问m对学生,问他们是否具有相同的宗教信仰。(如果相同,则他们会参加同一教会,彼此会认识)。要求计算最大可能的宗教数。

函数原型 int Religions(int n, int m, int* record);

n 人数 1<=n<=50000
m 抽查的学生对数,record中有2m个学生编号。 0<=m<=n*(n-1)/2 且 m<=500000
record[] 编号record[i*2]与record[i*2+1]的两个学生,他们之间有相同的信仰。0<=i<m,学生编号1~n
返回值:最大可能的宗教数。样例:
n=10 m=9
record[]=
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
返回值:1
n=10 m=4
record[]=
2 3
4 5
4 8
5 8
返回值:7
您可能理解错我的意思了,我要能在运行程序时输入数据,然后得出结果。不是只有样例中的数据。麻烦您再改一下

程序已修改....

在VC6.0编译调试通过,支持循环输入....

#include <stdio.h>
#include <string.h>

#define MAX 50000 //n<=50000
#define ERROR -1

int Religions(int n, int m, int* record)

int i;
int num = 0; //信仰总数
int man1, man2;
int result[MAX+1] = 0;

// 根据第i行record[] , 筛取result[]
for (i = 0; i < m; i++)

man1 = record[i*2];
man2 = record[i*2+1];

//之前没人跟man1,man2相同
if (result[man1] == 0 && result[man2] == 0)

num ++;
result[man1] = num;
result[man2] = num;
continue;


//之前有人跟man1相同
if (result[man1] != 0)

if (result[man2] != 0 && result[man1] != result[man2])

printf("record[]不合法!\n");
return ERROR;

result[man2] = result[man1];



// 根据已筛取的result[]中没记录的人数,累加num,
for (i = 1; i <= n ;i++)

if (result[i] == 0)

num++;



return num;

int main()

int i, n, m;
int record1[MAX*2];

redo:
printf("Input n:");
scanf("%d", &n);
printf("Input m:");
scanf("%d", &m);

for (i = 0; i < 2*m; i++)

scanf("%d", &record1[i]);

printf("最大可能的信仰数%d\n", Religions(n, m, record1));
printf("输入0退出,其他键继续: ");

getchar();
if (getchar() != '0')
goto redo;

return 0 ;
参考技术A 看不懂

c语言问题

c语言问题定义如下数组 int num[5],则引用num元素正确的是( )
A、num(3) B、num[1+2] C、 num[5] D、num[2,5]

B
A 格式错误,必须是[]才行.
C num[5]不存在,数组长度是5,所以包含的元素下标是从0~4
D 不能以小数调用,不存在,错误
参考技术A B
C越界了追问

为什么选B

追答

数组必须用中括号引用,且中括号内是一个数字或计算结果是一个数字

以上是关于一个c语言的问题的主要内容,如果未能解决你的问题,请参考以下文章

一个C语言问题

C语言的一个问题

c语言问题

一个c语言的问题

c语言问题?????????

关于C语言的语法中类型转换的一个问题。求教C语言高手。