使用递增操作符的数组输入,比如说

int b[100],i=0;
while(cin>>a){
b[i++]=a;
}
//在这个代码中,i是从1开始存数的,也就是数的范围从b[1]开始,而不是0

 对于排序,并且输出排序之后的角标的那种题,就可以看作

排序前

a[1]=12(数) a[1]=1 a[1]=16 a[1]=19 a[1]=54
b[1]=1(角标) b[2]=2 b[3]=3 b[4]=4 b[5]=5

排序后

 

a[1]=1 a[2]=12 a[3]=16 a[4]=19 a[5]=54
b[1]=2 b[2]=1 b[3]=3 b[4]=4 b[5]=5

就是在排序的过程中,数组里面的数交换,角标数组里面的数也换顺序

#include<bits/stdc++.h>
using namespace std;
#define N 15
int main(){
    int a[N],b[N];
for(int i=1;i<=10;i++){
    cin>>a[i];
    b[i] = i;
}
for(int i=1;i<=10;i++){
    for(int j=1;j<=10-i;j++){
        if(a[j]>a[j+1]){
            swap(a[j],a[j+1]);
            swap(b[j],b[j+1]);
        }
    }
}
   for(int i=1;i<=9;i++){
    cout<<a[i]<<' ';
   }cout<<a[10];
    cout<<endl;
   for(int i=1;i<=9;i++){
    cout<<b[i]<<' ';
   }cout<<b[10];
    return 0;
}

数列有序的问题

对于,在一个数列里面插入数,且按大小排列的问题,可以先将数存在a[0]里面,然后搞一个倒循环,如果数组里面的数比a[0]小,就向右移,让a[j+1]=m;

    int n,m;
    while(cin>>n>>m){
        if(n==0&&m==0) break;
        for(int i=1;i<=n;i++) cin>>a[i];
        a[0]=m;
        int j;
        for(j=n;a[j]<m;j--){
            a[j+1]=a[j];
        }
        a[j+1]=m;//这个地方的处理还是比较巧妙的,到了m<a[]的时候,就让m插进去了
        

数组右移问题

输入:

5
3 6 2 5 8

输出:

3 6 2 5 8
8 3 6 2 5
5 8 3 6 2
2 5 8 3 6
6 2 5 8 3

#include<bits/stdc++.h>
using namespace std;
int a[1010];
int main()
{
    int n, i, j, num[30];
    scanf("%d", &n);
    for(i=0; i<n; i++)  //这个是一次输入即输出的循环,代表了一种情况,就是和输入的相同的那一种
    {
        scanf("%d", &num[i]);
        if(i==0)
        printf("%d", num[i]);
        else
        printf(" %d", num[i]);
    }
    printf("\n");
    for(j=n-1; j>0; j--)   //这个外层循环是用来控制输出次数的,也就是右移的位次,n=5,一共需要移动5次,除去原封不动的那一次已经输出,只需要输出剩下4次,
//因为右移就是把尾部一部分的数移到最左边
{ for(i=j; i<n; i++) // 这个i=j表示需要移到最右边当头的那一个数,输出的时候前面不需要空格,在之后的循环,i!= j 的那个时候,分别移在头的右边 { if(i==j) printf("%d", num[i]); else printf(" %d", num[i]); } for(i=0; i<j; i++) //这个是处理i位之前数的输出的 printf(" %d", num[i]); printf("\n"); } return 0; }

 数组逆序问题

与上一题异曲同工

#include<bits/stdc++.h>
using namespace std;
int a[1010];
int main()
{
   int n,m;
   cin>>n;
   for(int i=1;i<=n;i++){
       cin>>a[i];
   }
   cin>>m;
   for(int i=n-m+1;i<=n;i++){
       cout<<a[i]<<' ';
   }
   for(int i=1;i<=n-m;i++){
       cout<<a[i]<<' ';
   }
    return 0;
}

 

posted on 2024-05-12 08:23  fafrkvit  阅读(8)  评论(1编辑  收藏  举报