今天我尝试制作一个程序(算法),搜索数组中的下一个数字,该数字大于找到的预览数并打印出来。
只有下一个数字不小时才能打印数字。
拳头示例: 4,2,3,9,4,6,5:输出应为:2,3,4,5。
第二个例子: 2,3,6,4,5,1输出应为1.
第三个例子: 1,9,8,7,6,5输出应为1.5。
示例,如果数组具有以下元素 1,4,2,3,6,4,5,8,6 ,则输出应为:
1 2 3 4 5 6
如果数组具有以下元素 1,4,2,3 ,则输出应为:
1,2,3
以下是该计划:
#include <stdio.h>
int sortArr(int* array, int n, int next){
int i,min = array[0];
int lang;
if(next==0){
for (i=0;i<n;i++){
if(array[i]<min){
min=array[i];
}
}
}
if(next != 0){
lang=next;
while(lang==next){
for (i=0;i<n;i++){
if(array[i]<min){
min=array[i];
}
}
lang++;
if(lang== next){
break;
}
}
min=lang;
}
return min;
}
int main(void){
int a[] = {1,4,2,3,6,4,5,8,6};
int i,l = sizeof a / sizeof a[0];
int next = 0;
int min = sortArr(a,l,next);
for(i=0;i<l;i++){
if(min < a[i]){
if(min < a[i]){
min = sortArr(a,l,next);
printf("%d ",min);
}
next++;
}
}
printf("\n");
return 0;
}
我认为,输出与这样一个事实有关,即只有当第一个元素是整个数组元素中最小的元素时它才能工作。
编辑: 我也尝试了以下内容:
#include <stdio.h>
int sortArr(int* array, int n, int next){
int i,min = array[0];
int lang;
if(next==0){
for (i=0;i<n;i++){
if(array[i]<min){
min=array[i];
}
}
}
if(next != 0){
lang=next;
while(lang==next){
for (i=0;i<n;i++){
if(array[i]<min){
min=array[i];
}
}
lang++;
if(lang== next){
break;
}
}
min=lang;
}
return min;
}
int main(void){
int a[] = {2,1,3,4};
/*int a[] = {9,4,2,3,6,4,5,8,6};*/
int i,l = sizeof a / sizeof a[0];
int next = 0;
int min = sortArr(a,l,next);
for(i=0;i<l;i++){
if(min == a[i]){
continue;
}
if(min < a[i]){
next++;
min = sortArr(a,l,next);
}
printf("%d ",min);
}
printf("\n");
return 0;
}
输出应该 2,3,4 ,但我得到 2,2,3,4 。
答案 0 :(得分:2)
这是一个简单的C代码,可以完成所需的操作。逻辑很简单。
#include<stdio.h>
#include<stdlib.h>
int is_valid(int,int [],int);
void main()
{
int a[]={1,4,2,3,6,4,5,8,6 };
int i;
for(i=0;i<sizeof(a)/sizeof(a[0])-1;++i)
{
if(is_valid(i,a,sizeof(a)/sizeof(a[0])))
printf("%d ",a[i]);
}
printf("%d ",a[i]);
}
int is_valid(int i,int a[],int l)
{
int j;
for(j=i+1;j<l;++j)
if(a[j]>=a[i])
continue;
else return 0;
return 1;
}
答案 1 :(得分:2)
#include <stdio.h>
int main(){
int a[] = {10,2,6,3,5,9,8,4,7};
int l = sizeof a / sizeof a[0];
int i,j;
int check=1;
for(i=0;i<l;i++){
check=1;
for(j=i+1;j<l;j++){
if(a[i]>=a[j]){
check=0;
}
}
if(check)
printf("%d",a[i]);
}
printf("\n");
return 0;
}
输出:2,3,4,7
答案 2 :(得分:1)
编辑时:调整以处理负数。
这是一个实现find_next
函数的答案,当你传递数组时,最后找到的条目的索引和这个条目的值(或者在初始传递中为0)返回索引下一个条目或数组的长度:
#include <stdio.h>
int find_next(int a[], int n, int i, int p){
int j,k,min,initialized = 0;
for(j = i; j < n; j++){
if(!initialized){
if(a[j] > p){
min = a[j];
k = j;
initialized = 1;
}
}
else{
if(p < a[j] && a[j] < min){
min = a[j];
k = j;
}
}
}
return initialized?k:n;
}
int main(void){
int a[] = {10,2,6,3,-1,5,9,8,4,7};
int i,j,p, n = sizeof(a)/sizeof(a[0]);
//find and print first item
p = a[0];
i = 0;
for(j = i+1; j < n; j++){
if(a[j] < p){
i = j;
p = a[i];
}
}
printf("%d ",p);
//loop using find_next to find subsequent
i = find_next(a,n,i+1,p);
while(i < n){
p = a[i];
printf("%d ",p);
i = find_next(a,n,i+1,p);
}
printf("\n");
return 0;
}
运行时会打印-1 4 7