A+班第四次

问题A 零基础学C/C++101——最大数与数列最后一个数交换

要点

  • 交换的写法,找到最大值的方法——记录最大值和下标
#include

int main()
{
    int n,a[100];

    while (~scanf("%d",&n)){

        for (int i=0;imaxa){
                maxa = a[i];
                idx = i;
            }
        }

        int t = a[idx];
        a[idx] = a[n-1];
        a[n-1] = t;

        for (int i=0;i

问题B 零基础学C/C++102——最小数与数列第一个数交换

要点

  • 比起上题这一题记录最小值和下标,注意适合第一个数交换也就是下标为0的数
#include

int main()
{
    int n,a[100];

    while (~scanf("%d",&n)){

        for (int i=0;i

问题C 零基础学C/C++103——找出一个数组中出现次数最多的那个元素

要点

  • 这题比较难讲,我们另外开一个数组,储存数量,为什么只要遍历到i-1就行了,我们分类讨论:1.当前是最后,正确 2.当前不是最后,那么后面可能正确。
#include

int main()
{
    int n,a[100],cnt[100];

    while (~scanf("%d",&n)){

        for (int i=0;i

问题D 零基础学C/C++104——查找某一个数

要点

  • 初始化为-1,这题可以扯皮一下二分的方法
#include

int main()
{
    int n,a[100],x;

    while (~scanf("%d%d",&x,&n)){

        for (int i=0;i

问题E 零基础学C/C++105——元素前移1位

要点

  • 代码写的是偷懒的办法,考察这题需要用另外一种写法,就是先记录一下a[0],然后a1~an左移,然后a0放到an-1
#include

int main()
{
    int n,a[100];

    while (~scanf("%d",&n)){

        for (int i=0;i

问题F 进制转换

要点

  • 重点之一:进制转换本身,就是不停从后面取余数,然后除自身的做法
  • 此题与负数取余无关,只是进制转换,把负号去掉即可
  • 没必要讲7%-3,-7%3,结果是都都取商更趋向0的那一种,在C++中
#include

int main()
{
    int n,r;

    while (~scanf("%d %d",&n,&r)){

        int flag = 1;
        if (n<0) {
            flag = -1;
            n = -n;
        }
        int a[100],idx = 0;
        while (n!=0){
            a[idx++] = n%r;
            n = n/r;
        }


        if (flag==-1) printf("-");
        for (int i=idx-1;i>=0;i--){
            if (a[i]>=10) printf("%c",a[i]-10+'A');
            else printf("%d",a[i]);
        }
        printf("\n");

    }
    return 0;
}

问题G 零基础学C/C++107——插入一个数到数列中

要点

  • 再次强调如何把数插入到数列中——后面的后移
  • 顺便讲一下数组初始化的方法
#include

int main()
{
    int m;

    while (~scanf("%d",&m)){

        int a[10] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 0};

        int idx = 0;
        for (int i=0;i<9;i++){
            if (m>=a[i]) idx = i+1;
        }
        for (int i=8;i>=idx;i--) a[i+1] = a[i];
        a[idx] = m;

        for (int i=0;i<10;i++){
            printf("%d ",a[i]);
        } 

        printf("\n");
    }
    return 0;
}

问题H 零基础学C/C++108——程序设计竞赛

要点

  • 经典选择排序
#include

int main()
{
    int n,a[30];

    while (~scanf("%d",&n)){

        for (int i=0;i

**问题L 零基础学C/C++112——偶数排序 **

要点

  • 首先一个很正常的思路就是把普通的奇数变成绝对值很大的负数,统计数量
  • 然后排完序不输出哪几个就行了
  • 然后强调一下,奇数取余可能是-1,也可能是正1,比如-7%2==-1,所以可以用&1或者等于±1
#include

int main()
{
    int n,a[30];

    while (~scanf("%d",&n)){
        int jishu = 0;
        for (int i=0;i

问题M 零基础学C/C++113——并列排名

要点

  • 我们要查的分数是这些一样中的第一个,那么我们只需要知道比这靠前的有多少个,下一个就是对应的排名。
#include

int main()
{
    int n,a[100];

    while (~scanf("%d",&n)){
        for (int i=0;i

你可能感兴趣的:(CJSYZX相关,程序设计)