70,020
社区成员




#include<stdio.h>
int main()
{ int n,m,min,x,y,i,j,t;
int c=0;
int *p;
int a[10][10];
scanf("%d",&n);
scanf("%d",&m);
for(i=0;i<n;i++)
{ for(j=0;j<m;j++)
scanf("%d",&a[10][10]);
}
for(i=0;i<n;i++)
{ min=a[i][0];
x=i;
y=0;
for(j=0;j<m;j++)
{if(a[i][j]<min)
{min=a[i][j];
x=i;
y=j;}
} //先求出这一行中最小
p=&(a[0][y]);//把指针移到该元素所在列首
c=0;
for(t=1;t<n;t++)
{p=p+m; //指针下移 看是否有比该元素小的元素
if(*p<min)
c=1;
}
if(c==0)//若无则输出
{printf("%d,",min);
printf("%d,",x+1);
printf("%d,",y+1);}
}
}
为什么输出的是错的
#include <stdio.h>
int main(void)
{
int n, m, min, i, j, t;
int c = 0;
int *p;
scanf("%d%d", &n, &m);
int a[n][m];
int x[n], y[m]; //数组,存放最小值的下标,考虑到有重复最小值的情况
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < n; i++) {
min = a[i][0];
x[0] = i;
y[0] = 0;
for (j = 0; j < m; j++) {
if (a[i][j] < min) {
min = a[i][j];
x[0] = i;
y[0] = j;
}
} //先求出这一行中最小
// 该行的最小值的个数,因为可能存在多个相等的最小值的情况
// 整行遍历,避免重复计数,所以xcount从0开始计数
int xcount = 0;
for (j = 0; j < m; j++) {
if (a[i][j] == min) {
x[xcount] = i;
y[xcount] = j;
xcount++;
}
}
for (int k = 0; k < xcount; k++) {
p = &(a[0][y[k]]); //把指针移到该元素所在列首
c = 0;
for (t = 0; t < n; t++) {
if (*p < min) {
c = 1;
break;
}
p = p + m;
}
//若无则输出
if (c == 0) {
printf("%d,", min);
printf("%d,", x[k] + 1);
printf("%d\n", y[k] + 1);
}
}
}
return 0;
}
#include <stdio.h>
int main(void)
{
int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int *p = a;
printf("address of p = %p\n", p);
printf("address of p + 2 = %p\n", p + 2);
printf("address of p + 5 = %p\n", p + 5);
for (int i = 0; i < 5; i++) {
printf("a[%d] = %d\t | addr of a[%d] \t= %p\n", i, a[i], i,
&a[i]);
printf("*(a+%d) = %d\t | addr of *(a+%d) \t= %p\n", i, *(a + i),
i, a + i);
printf("*p = %d\t\t | addr of *p \t\t= %p\n", *p, p);
p++;
}
return 0;
}
address of p = 0x7ffe96ef0160
address of p + 2 = 0x7ffe96ef0168
address of p + 5 = 0x7ffe96ef0174
a[0] = 0 | addr of a[0] = 0x7ffe96ef0160
*(a+0) = 0 | addr of *(a+0) = 0x7ffe96ef0160
*p = 0 | addr of *p = 0x7ffe96ef0160
a[1] = 1 | addr of a[1] = 0x7ffe96ef0164
*(a+1) = 1 | addr of *(a+1) = 0x7ffe96ef0164
*p = 1 | addr of *p = 0x7ffe96ef0164
a[2] = 2 | addr of a[2] = 0x7ffe96ef0168
*(a+2) = 2 | addr of *(a+2) = 0x7ffe96ef0168
*p = 2 | addr of *p = 0x7ffe96ef0168
a[3] = 3 | addr of a[3] = 0x7ffe96ef016c
*(a+3) = 3 | addr of *(a+3) = 0x7ffe96ef016c
*p = 3 | addr of *p = 0x7ffe96ef016c
a[4] = 4 | addr of a[4] = 0x7ffe96ef0170
*(a+4) = 4 | addr of *(a+4) = 0x7ffe96ef0170
*p = 4 | addr of *p = 0x7ffe96ef0170
scanf("%d",&a[i][j]);
p = p + 10;
for (t = 0; t < n; t++) {
if (*p < min) {
c = 1;
break;
}
p = p + 10;
}
#include<stdio.h>
#define inf 0x3f3f3f3f //无穷大
int main() {
int a[10][10];
int i,j,n,m,min,min_x,min_y;
scanf("%d",&n);
scanf("%d",&m);
min=min_x=min_y=inf;//初始化为最大的数
for(i=0; i<n; i++) {
for(j=0; j<m; j++) {
scanf("%d",&a[i][j]);
}
}
for(i=0; i<n; i++) {
for(j=0; j<m; j++) {
if(a[i][j]<min){ //找到更小的值就更新最小元素
min=a[i][j];
}
}
}
for(i=0; i<n; i++) { //这种写法具备普遍性,考虑二维数组中有可能有多个最小元
for(j=0; j<m; j++) {
if(a[i][j]==min){
min_x=i;
min_y=j;
printf("最小元素 元素所在的行 元素所在的列:");
printf("%d %d %d\n",min,min_x,min_y);
}
}
}
return 0;
}