oj 在数组中查找指定元素
题目要求:
若查找成功:输出第一次出现的下标
若查找失败:输出Not Found
如何实现单线两种输出?
设置一个flag,标志是否有需要输出的数
如果有,flag就为1,如果没有,flag就为0,从而实现最后的输出分叉
#include<stdio.h>
int main(){
int n,i,element,sum=0;
int flag=1;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&element);
for(i=0;i<n;i++){ //遍历数组,找出第一次出现的位置
if(a[i]==element){
flag=1;
break;
}
flag=0;
}
if(flag==1){ //决定结果
printf("%d",i);
}else if(flag==0){
printf("Not Found");
}
}
oj 数列特征
#include<stdio.h>
int sum(int a[],int size){
int s=0;
for(int i=0;i<size;i++){
s+=a[i];
}
return s;
}
int max(int a[],int size){
int j=0;
for(int i=0;i<size;i++){
if(a[j]<=a[i]){
j=i;
}
}
return a[j];
}
int min(int a[],int size){
int j=0;
for(int i=0;i<size;i++){
if(a[j]>=a[i]){
j=i;
}
}
return a[j];
}
int main(){
int n,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
printf("%d\n",max(a,n));
printf("%d\n",min(a,n));
printf("%d\n",sum(a,n));
}
函数调用时,数组只用写他的名字 比如max(a,(数组名),n(数组大小))
oj数列排序
#include<stdio.h>
int main(){
int n,temp;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++){ //冒泡排序
for(int j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
}
原理:将数字依次向右比较,若j+1小于j,则将a[j+1]和a[j]交换
i的作用只是一个标识
oj 求连续数列长度
#include<stdio.h>
void fact(int a[],int size){
int temp;
for(int i=0;i<size;i++){
for(int j=0;j<size-i-1;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main(){
int n,i,sum=0;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
fact(a,n);
for(i=0;i<n;i++){
sum++;
if(a[i+1]!=a[i]+1){ //判断是否后一项比前一项大1
break;
}
}
printf("%d",sum);
}