一个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]
A 格式错误,必须是[]才行.
C num[5]不存在,数组长度是5,所以包含的元素下标是从0~4
D 不能以小数调用,不存在,错误 参考技术A B
C越界了追问
为什么选B
追答数组必须用中括号引用,且中括号内是一个数字或计算结果是一个数字
以上是关于一个c语言的问题的主要内容,如果未能解决你的问题,请参考以下文章