输入一个正整数n,再输入n个整数,输出最小值 c语言

2024年11月15日 03:46
有5个网友回答
网友(1):

你题目有没有写全,如果按照你这个题目,没有规定输入整数的位数,考虑要输入任意位数的数字,那么数字就不能使用已有的整数类型来保存(比如int只有4个字节大小,超出就溢出了)。

我写的是任意长度的数字输入,比较取最小值。(你内存够就行)

#include 
#include 
#include 
#define ssAdd 10//内存每次扩充大小 默认10个字符

//存储任意位数的整数,只接收数字输入,如夹杂非数字字符,将被过滤
char *saveNum(char *str,char c);//参数1:存储位置的首地址;参数2:要存储的数字字符;

//查找数字字符串数组中,最小的整数,返回最小整数所在的序列值
int findMin(char *num[],int n);//参数1:数字字符串数组   参数2:数字字符串个数

int maxSize;//当前最大存储空间大小(字符数 不算结束符号)
int main()
{
    int n,i,minIndex;
    printf("请输入n的值:");
    scanf("%d",&n);
    getchar();
    char *num[n],c;
    for(i=0;i    {
        printf("请输入第%d个整数(回车确认):",i+1);
        maxSize=ssAdd;
        num[i]=(char *)malloc(sizeof(char)*(ssAdd+1));//初始化存储大小
        memset(num[i],0,ssAdd+1);
        while(1)
        {
            c=getchar();
            if(c=='\n')
                break;
            if(c>='0' && c<='9')//输入的是数字才存储,不是数字直接跳过
                num[i]=saveNum(num[i],c);
        }
    }
    for(i=0;i    {
        printf("%s\n",num[i]);
    }

    minIndex=findMin(num,n);
    printf("最小值:%s",num[minIndex]);
    return 0;
}
int findMin(char *num[],int n)
{
    int minlen,len,i,j,index;
    minlen=len=strlen(num[0]);
    index=0;
    for(i=1;i    {
        len=strlen(num[i]);
        if(len        {
            minlen=len;
            index=i;
        }
        else if(len==minlen)//长度相等 从最高位开始比较数值
        {
            for(j=0;j            {
                if((num[i][j]-'0')<(num[index][j]-'0'))
                {
                    minlen=len;
                    index=i;
                    break;
                }
            }
        }
    }
    return index;
}

char *saveNum(char *str,char c)
{
    int len;
    char *strSave=NULL;
    len=strlen(str);
    if(maxSize-len<=0)//存储空间不够,先扩充存储空间后再存储
    {
        strSave=str;
        maxSize=maxSize+ssAdd;
        str=(char *)malloc(sizeof(char)*(maxSize+1));//扩展新空间
        memset(str,0,maxSize+1);
        strcpy(str,strSave);
        free(strSave);//释放原空间
        strSave=NULL;
    }
    str[len]=c;//存储输入值
    return str;
}

网友(2):

1、首先,定义三个整型变量,保存正整数、临时变量和各位数总和。

2、给变量总和sum赋值,初值为0。

3、接着,输入正整数,保存在变量n中。

4、给临时变量赋值,让它的值等于正整数的值。

5、用while语句判断,判断的条件为n不等于0。

6、条件成立时,求正整数各位上数字的和。

7、将正整数中,已求和的这一位数去除。

8、最后,输出正整数各位上数字的总和。

9、运行程序,输入任意的一个正整数,计算机就会输出它的各位上数字的总和。

网友(3):

#include

int main()

{int i,n,min,x;

 scanf("%d%d",&n,&min);

 for(i=2;i<=n;i++)

 {scanf("%d",&x);

  if(x

}

printf("\nMin=%d\n",min);

   return 0;

}

网友(4):

#include  

int main()  
{      
    int i,n,t,min;
    scanf("%d",&n);//输入个数
    scanf("%d",&t);  //输入第一个数
    min=t;  //令最小值等于第一个数
    for(i=1;i      {
        scanf("%d",&t);
        if(t      }
    printf("%d",min); //输出
    return 0;  
}

网友(5):

#include
void main(){
int n,i,j,temp,num[100000];
printf("请输入整数n:");
scanf("%d",&n);
for(i=0;iprintf("请输入第%d个整数:",(i+1));
scanf("%d",&num[i]);
}
for(i=0;i for(j=0;j if(num[j] temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
printf("这%d个数的最小值是:%d\n",n,num[n-1]);
}