这个怎么输出正确的呢 不会写不来帮忙看看为啥子错了,谢谢!检查了数组也没问题啊
寻找最大值和最小值,你这种写法是不对的,虽然偶然会得到正确的答案。正确的写法是
for(inti=0;i<m;i++)
{
if(min>a[i])min=a[i];
if(max<a[i])max=a[i];
}
条件判断那里错了,这样是两两比较,应该写成:
if (a[i]<min)
另外两个for循环可以合并起来
#include <stdio.h>
int main()
{
int n,arr[1000],cnt[1000] = {0}; //cnt为计数器数组,需要初始化
int i,j,k,max = 0;
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
for(i = 0;i < n;i++)
{
for(j = 0;j < n;j++)
{
if(arr[i] == arr[j]) //找到一样的
{
cnt[i] = cnt[i] + 1; //cnt[i]++
}
}
}
for(i = 0;i < n;i++)
{
if(max < cnt[i]) //一直遍历直到找重复最多的
{
max = cnt[i]; //找到后赋值给max
k = i; //i就是重复最多的数的下标
}
}
printf("出现次数最多的数字为:%d\n其出现次数为:%d",arr[k],max);
return 0;
}
本题要求给出n个元素的数组,从小到大排列,再输入一个num,插入到数组中, 使得新数组依旧是从小到大的顺序(用一个数组完成)。
#include <stdio.h>
int main()
{
int n,i,j;
scanf("%d",&n);
int arr[n],t1,t2,num,end;
for(i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
scanf("%d",&num); //输入要插入的数字
end = arr[n-1]; //保存倒数第二个元素
if(num > end) //考虑特殊情况,如果插入的数大于倒数第二个
{
arr[n] = num; //直接插入赋值
}
else
{
for(i = 0;i < n;i++)
{
if(arr[i] > num) //如果原本的数大于插入的数
{
t1 = arr[i]; //先保存原来的数
arr[i] = num; //把插入的数放到原来数的位置
for(j = i + 1;j <= n;j++) //处理原来的数
{
t2 = arr[j]; //原来的数到了后一位保存住
arr[j] = t1; //把原来的数赋值给现在要存的这个位置上
t1 = t2;
}
break;
}
}
}
for(i = 0;i <= n;i++) //注意这里i<=n,因为多插入了一个数字
{
printf("%d ",arr[i]);
}
return 0;
}
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯*AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M*个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2 1 2 3 4 5 6
结尾无空行
输出样例:
5 6 1 2 3 4
结尾无空行