使用数组的两种情况:

08-0. 查找整数(10)
本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”。
输入格式:
输入在第1行中给出2个正整数N(<=20)和X,第2行给出N个整数。数字均不超过长整型,其间以空格分隔。
输出格式:
在一行中输出X的位置,或者“Not Found”。

#include <stdio.h>
int main()
{
int n,x;
int shuzi,sig=0,cnt=0;
const int NUMBER=20;//定义数组大小
int num[20]={0};
//int num[NUMBER]={0};//定义数组并初始化
//[Error] variable-sized object may not be initialized
printf("请输入两个正整数(个数和X),以空格隔开\n");
scanf("%d %d",&n,&x);
//数组赋值 跳出循环时cnt=n
while(cnt<n)
{
scanf("%d",&shuzi);
num[cnt++]=shuzi;
}
//遍历数组并判断
{
int i;
for(i=0;i<cnt;i++)
{
if(num[i]==x)
{
printf("%d ",i);
sig=1;
}
}
if(sig==0){
printf("Not Found");
}
}
}
数组定义出错:
const int NUMBER=20;//定义数组大小
int num[NUMBER]={0};//定义数组并初始化
//[Error] variable-sized object may not be initialized 可变大小的对象可能无法初始化
08-1. 求一批整数中出现最多的个位数字(20)
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
输入格式:
输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔。
输出格式:
在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

#include <stdio.h>
int main()
{
int n,num;//个数和数字
int count[10]={0,0,0,0,0,0,0,0,0,0};
int i=0;
scanf("%d",&n);//输入在第1行中给出正整数N(<=1000)
for(i=0;i<n;i++)
{
scanf("%d",&num);//在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔。
//取num里面的每一个数给数组存着
int j=0;
while(num!=0)
{
j=num%10;
count[j] ++;
num=num/10;
}
}
//输出 数组里面最大的值
{
int i,j,k,max=0;
int cnt=0;
for(j=0;j<10;j++)
{
if(count[j]>max){
max=count[j];
}
}
printf("%d:",max);
//判断出现max次的 有几个数
for(i=0;i<10;i++)
{
if (count[i]==max)
{
cnt++;
}
}
//输出 并且保证最后末尾灭有空格
for(k=0;k<10;k++){
int t=0;
if (count[k]==max)
{
printf("%d",k);
t++;
if (t!=cnt){
printf(" ");
}
}
}
}
}
输入3个数字,为什么要输入4个数字?????
scanf后面能加【空格】!!!!!
n=3;
for(i=0;i<n;i++)
{
scanf("%d ",&num);
}
1. i=0 scan i=1; 判断i<3
2. i=1 scan i=2 判断i<3
3.i=3 scan i=3 判断 跳出

08-2. 求矩阵的局部极大值(15)
给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。
输入格式:
输入在第1行中给出矩阵A的行数M和列数N(3<=M,N<=20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。
输出格式:
每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。

#include <stdio.h>
int main()
{
int m,n;//行 列
scanf("%d %d",&m,&n);
//输入矩阵
int num[20][20]={0};
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++){
scanf("%d",&num[i][j]);
}
}
//遍历矩阵
{
int i,j,sig=0;
for(i=1;i<m-1;i++)//行 循环条件在排除边界元素
{
for(j=1;j<n-1;j++){//列 循环条件在排除边界元素
if(num[i][j]>num[i-1][j]&&
num[i][j]>num[i+1][j]&&
num[i][j]>num[i][j-1]&&
num[i][j]>num[i][j+1])
{
sig=1;
printf("%d %d %d\n",num[i][j],i+1,j+1); //i j是数组下标位置,要输出正确位置就是要+1
}
}
}
if(sig==0){
printf("None ");
printf("%d %d",m,n);
}
}
}
08-3. 组个最小数 (20)
给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入格式:
每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
输出格式:
在一行中输出能够组成的最小的数。

#include <stdio.h>
int main()
{
int i,n;
int num[10]={0};
for(i=0;i<10;i++){
scanf("%d",&n);
num[i]=n;
}
//printf("%d",num[5]) ;
//遍历数组 首位不为0
{
int i,t;
for(i=1;i<10;i++){//从1开始遍历 保证首位不为0
if(num[i]!=0){
printf("%d",i);
num[i]=num[i]-1;
//printf("%d",num[i]);
break;
}
}
for(t=0;t<10;t++)//遍历不为0 输出num[t]次
{
if(num[t]!=0){
int j;
for(j=0;j<num[t];j++)
{
printf("%d",t);
}
}
}
}
}