user-0 提问: 问两个C语言的题目

回复:
user: user-1
content: 看来分数让大家头脑发热啊，别只顾着分数害了别人。

user: user-2

user: user-3
content: 我修改一下find函数的代码。那个函数其实还可以再精练一点，可以只用一个cnt，而不用flag标志： int find (int a [] ,int n, int x , int * p, int * q) {     int cnt = 0;     while (n --)         if (a [n] == x)             *(cnt ++ ? p : q) = n;     return cnt; }

user: user-4
content: 引用 10 楼 sholber 的回复:如果是别人我就不说啥了……你是版主啊。C语言的美不是完成功能就OK了的。这位高人，首先声明，哥不是此版版主，请看清楚了。再一个，回复是自愿行为，我也没发啥非法内容，求勿喷，再一个，lz的情形很明显就是找作业答案来了，好了，说多了

user: user-3
content: 引用 9 楼 starytx 的回复:仅供参考： int find(int a[] ,int n, int x , int *p ,int *q) { 	int nFlag = -1; 	int nCount = 0; 	for (int i = 0; i != n; ++i) 	{ 		if (a[i] == x) 		{ 			if (nFlag == -1) 			{ 				*p = i; 			} 			nFlag = i; 			nCount++; 		} 	} 	*q = nFlag;  	return nCount; }  int main() { 	int x, c , first , last ; 	int a[10] = {12,34,5,6,87,3,4,23,5,22}; 	printf("请输入要查找的整数值:\n"); 	scanf("%d" ,&x); 	c = find(a ,10 ,x ,&first ,&last); 	printf("要查找的整数值%d出现的次数是%d,首次出现的下标是%d,最后出现的下标是%d:\n" ,x,c ,first ,last); 	return 0; }  如果是别人我就不说啥了……你是版主啊。C语言的美不是完成功能就OK了的。

user: user-5
content: 大牛出没，即刻秒杀，my god

user: user-0
content: 真心谢谢各位的回答了，我是论坛新人，前天和昨天发了两个帖子问了点题目，得到大家这么多回答，对我真的很有帮助，分数不多，能给的我都给大家了，谢谢大家

user: user-4
content: 仅供参考： int find(int a[] ,int n, int x , int *p ,int *q) { 	int nFlag = -1; 	int nCount = 0; 	for (int i = 0; i != n; ++i) 	{ 		if (a[i] == x) 		{ 			if (nFlag == -1) 			{ 				*p = i; 			} 			nFlag = i; 			nCount++; 		} 	} 	*q = nFlag;  	return nCount; }  int main() { 	int x, c , first , last ; 	int a[10] = {12,34,5,6,87,3,4,23,5,22}; 	printf("请输入要查找的整数值:\n"); 	scanf("%d" ,&x); 	c = find(a ,10 ,x ,&first ,&last); 	printf("要查找的整数值%d出现的次数是%d,首次出现的下标是%d,最后出现的下标是%d:\n" ,x,c ,first ,last); 	return 0; }

user: user-6
content: 引用 2 楼 ZHANGJIXIN 的回复:第一题: int find(int a[] ,int n, int x , int *p, int *q) { 	int count = 0; 	bool firstFind = true;  	for(int i=0; i<n; ++i) 	{ 		if(a[i] == x) 		{ 			if(firstFind) 			{ 				*p = i; 				*q = i; 				firstFind = i;  //改成firstFind=false; 				++count; 			} 			else 			{ 				*q = i; 				++count; 			} 		} 	} 	return count; } firstFind = i;  //改成firstFind=false;

user: user-3
content: 满分是朕的，不要抢： #include <stdio.h> #include <stdlib.h>  int find (int a [] ,int n, int x , int * p, int * q) {     int cnt = 0, flag = 0;     while (n --)         if (a [n] == x)             *(flag ++ ? p : q) = n, cnt ++;     return cnt; }  int main (void) {     int a [] = {1, 2,35, 2, 2, 2, 6, 34, 4, 2, 3, 6};     int p, q;     int c = find(a, sizeof a, 2, &p, &q);     printf("%d, %d, %d", c, p, q); }

user: user-3
content: 满分应该是我的： int find (int a [] ,int n, int x , int * p, int * q) {     int cnt = 0, flag = 0;     while (n --)         if (a [n] == x)             *(flag ++ ? p : q) = n, cnt ++;     return cnt; }

user: user-7
content: 引用 21 楼 u012436960 的回复:[quote=引用 13 楼 sholber 的回复:] int find (int a [] ,int n, int x , int * p, int * q) {     int cnt = 0;     while (n --)         if (a [n] == x)             *(cnt ++ ? p : q) = n;     if (cnt == 1) * p = * q;     return cnt; } 你不觉得p q好像反了吗？[/quote]  引用 21 楼 u012436960 的回复:[quote=引用 13 楼 sholber 的回复:] int find (int a [] ,int n, int x , int * p, int * q) {     int cnt = 0;     while (n --)         if (a [n] == x)             *(cnt ++ ? p : q) = n;     if (cnt == 1) * p = * q;     return cnt; } 你不觉得p q好像反了吗？[/quote] 哦，是我想错了

user: user-7
content: 引用 13 楼 sholber 的回复:int find (int a [] ,int n, int x , int * p, int * q) {     int cnt = 0;     while (n --)         if (a [n] == x)             *(cnt ++ ? p : q) = n;     if (cnt == 1) * p = * q;     return cnt; } 你不觉得p q好像反了吗？

user: user-8
content: 引用 17 楼 zhao4zhong1 的回复:…… 小心边界条件！ 小心边界条件！  小心边界条件！ 小心边界条件！ ……

user: user-9
content: 引用 13 楼 sholber 的回复:int find (int a [] ,int n, int x , int * p, int * q) {     int cnt = 0;     while (n --)         if (a [n] == x)             *(cnt ++ ? p : q) = n;     if (cnt == 1) * p = * q;     return cnt; }  很简练，厉害~

user: user-10
content: 赵老师出现了，你们还抢什么

user: user-11
content: …… 小心边界条件！ 小心边界条件！  小心边界条件！ 小心边界条件！ ……

user: user-3
content: 引用 15 楼 robert_chen1988 的回复:你们没发现下标忘记+1了吗？ #include <iostream> using namespace std;  int find(int a[] ,int n, int x , int *p ,int *q);  int main(){  	int a[] = {1,2,3,4,5,6,1,34,1,13}; 	int x, c, first, last; 	cout<<"请输入一个整数值:"; 	cin>>x; 	 	c = find(a, 10, x, &first,&last); 	cout<<c<<"  "<<first<<"  "<<last<<endl;   system("pause"); return 0; }  int find(int a[] ,int n, int x , int *p, int *q) { 	int count = 0; 	bool firstFind = true;  	for(int i=0; i<n; ++i) 	{ 		if(a[i] == x) 		{ 			if(firstFind) 			{ 				*p = i+1; 				*q = i+1; 				firstFind = 0; 				++count; 			} 			else 			{ 				*q = i+1; 				++count; 			} 		} 	} 	return count; } 一个简单的函数find被写得这样复杂，加不加1已经不重要了。这100分俺一定要争。楼主你要是不给非揍你PP

user: user-12
content: 你们没发现下标忘记+1了吗？ #include <iostream> using namespace std;  int find(int a[] ,int n, int x , int *p ,int *q);  int main(){  	int a[] = {1,2,3,4,5,6,1,34,1,13}; 	int x, c, first, last; 	cout<<"请输入一个整数值:"; 	cin>>x; 	 	c = find(a, 10, x, &first,&last); 	cout<<c<<"  "<<first<<"  "<<last<<endl;   system("pause"); return 0; }  int find(int a[] ,int n, int x , int *p, int *q) { 	int count = 0; 	bool firstFind = true;  	for(int i=0; i<n; ++i) 	{ 		if(a[i] == x) 		{ 			if(firstFind) 			{ 				*p = i+1; 				*q = i+1; 				firstFind = 0; 				++count; 			} 			else 			{ 				*q = i+1; 				++count; 			} 		} 	} 	return count; }

user: user-8
content: 谁和我抢分打断他腿 #include<stdio.h> #include<stdlib.h>  //第一个问题 int find(int a[], int n, int x, int *p,int *q) { 		int num = 0; 		int state = 0; 		for(n = n -1; n>0;--n) 		{ 				if(a[n] == x) 				{ 						num++; 						*p = n; 						if(state == 0) 						{ 								state = 1; 								*q= n; 						} 				} 		} 		return num; }  //第二个问题 int main() { 		int a[10] = {1,2,3,5,6,5,4,8,5,5}; 		int x,c,first,last; 		scanf("%d",&x); 		c= find(a,10,x,&first,&last); 		printf("次数：%d\n",c); 		if(c > 0) 				printf("fisrt:%d\n last:%d\n",first,last); 		exit(0); }