求朋友们指点C#解题思路

一、数组循环左移
本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0a 1⋯an−1)变换为(am⋯an−1a0a1⋯am−1)(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
输入第1行给出正整数n(≤100)和整数m(≥0);第2行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出循环左移m位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
8 3
1 2 3 4 5 6 7 8
结尾无空行
输出样例:
4 5 6 7 8 1 2 3
二、最长连续递增子序列
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
输入格式:
输入第1行给出正整数n(≤10的5次方);第2行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。
输入样例:
15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10
结尾无空行
输出样例:
3 4 6 8

让用C#,真的C#小白啊,求求好心人指点解题思路啊,不一定非得对,差不多是那意思就行,救命啊😭 😭 😭

第一个:先保存a0将后面数组向左移动一位,再将最后一位赋值为a0,进行m%n次
第二个:用一个b数组保存长度,先对a数组扫描,若是a[i+1]>a[i],则b[i+1]=b[i]+1,对b数组扫描找出最早出现的最大值及其下标,这个下标就对应这a中最长递增序列的最后一位下标,最大值为序列长度,然后可以找到这段最早最长递增序列的部分

#include<iostream>
using namespace std;
int main(void) {
    int n, a[100], b[100];                //b数组用来保存序列长度
    scanf_s("%d", &n);
    for (int i = 0;i < n;i++) {
        scanf_s("%d", &(a[i]));
    }
    for (int i = 0;i < n;i++) {
        b[i] = 0;
    }
    for (int i = 0;i < n - 1;i++) {
        if (a[i] < a[i + 1]) {
            b[i + 1] = b[i] + 1;                  //当a[i+1]>a[i],递增长度加1
        }
        else {
            b[i + 1] = 0;                     //若小于,则设为0
        }
    }
    int  max = b[0], j=0;                //max保存最早出现最长递增序列的长度,j表示其最后一位的下标
    for (int i = 1;i < n;i++) {
        if (b[i] > max) {
            max = b[i];
            j = i;
        }
    }
    for (int i = j - max;i <= j;i++) {
        printf("%d ", a[i]);
    }
    return 0;
}

```c++


```