算法笔记刷题(100000569-100000571)

算法笔记刷题(100000569-100000571)

100000569

A

插入排序

scanf以空格,回车,制表符结束输入

#include <stdio.h>

int main()
{
    int a[10],i,j,insert;
    for (i = 0; i < 9; ++i) {
        scanf("%d", &a[i]);
    }
    scanf("%d", &insert);
    for (i = 0; i < 9; ++i) {
        if (insert<=a[i]) {
            for (j = 9; j > i; --j) {
                a[j] = a[j - 1];
            }
            a[i] = insert;
            break;
       }
    }
    if (a[8] < insert) {
        a[9] = insert;
    }
    for (i = 0; i < 10; ++i) {
        printf("%d\n", a[i]);
    }
    return 0;
}

B

逆序:对称的数交换

#include <stdio.h>

int main()
{
    int a[10],i,temp;
    for (i = 0; i < 10; ++i) {
        scanf("%d", &a[i]);
    }
    for (i = 0; i < 5; ++i) {
        temp = a[i];
        a[i] = a[9 - i];
        a[9 - i] = temp;
    }
    for (i = 0; i < 10; ++i) {
        printf("%d\n", a[i]);
    }
    return 0;
}

C

10*10二维数组存储

#include <stdio.h>

int main()
{
    int layer,first=1,a[10][10],i,j;
    scanf("%d", &layer);
    a[0][0] = 1;
    printf("%d \n", a[0][0]);
    for (i = 1; i < layer; ++i) {
        a[i][0] = 1;
        a[i][i] = 1;
        printf("%d ", a[i][0]);
        for (j = 1; j < i / 2 + 1; ++j) {
            a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
            printf("%d ", a[i][j]);
        }
        for (j = i / 2 + 1; j < i; ++j) {
            a[i][j] = a[i][i-j];
            printf("%d ", a[i][j]);
        }
        printf("%d ", a[i][i]);
        printf("\n");
    }
    
    return 0;
}

D

#include <stdio.h>

int main()
{
    char a[10],c;
    int i = 0,j;
    while ((c = getchar()) != '\n') {
        a[i] = c;
        ++i;
    }
    a[i] = '\0';
    for (j = 0; j < i; ++j) {
        if (a[j] >= 65 && a[j] <= 90) {
            a[j] = 25 - (a[j]-65) +65;
        }
        else if(a[j] >= 97 && a[j] <= 122) {
            a[j] = 25 - (a[j] - 97) +97;
        }
        
    }
    printf("%s", a);
    
    return 0;
}

E

gets()方法已经不被PAT编译器支持,用cin.getline代替

#include <stdio.h>
#include<iostream>
using namespace std;

int main()
{
    char s1[10],s2[10];
    int i = 0,num=0;
    cin.getline(s1,10);
    cin.getline(s2, 10);
    while (s1[i] != '\0' && s2[i] != '\0') {
        if (s1[i] != s2[i]) {
            num = s1[i] - s2[i];
            break;
        }
        ++i;
    }
    printf("%d", num);
    return 0;
}

F

中间(偏左)下标为i/2i为最后下标

#include <stdio.h>

int main()
{
    int a[10],i,temp;
    for (i = 0; i < 10; ++i) {
        scanf("%d", &a[i]);
    }
    for (i = 0; i < 5; ++i) {
        temp = a[i];
        a[i] = a[9 - i];
        a[9 - i] = temp;
    }
    for (i = 0; i < 10; ++i) {
        printf("%d\n", a[i]);
    }
    return 0;
}

G

#include <stdio.h>

int main()
{
    int f[20],i;
    f[0] = f[1] = 1;
    printf("%d\n%d\n", f[0],f[1]);
    for (i = 2; i < 20; ++i) {
        f[i] = f[i - 1] + f[i - 2];
        printf("%d\n", f[i]);
    }

    return 0;
}

H

冒泡排序,n为排序个数

外层为排序趟数 n-1次 0<=i<n-1

内层为比较次数 0<=j<n-1-i

如没有交换,跳出循环,根据flag

#include <stdio.h>

int main()
{
    int a[10],i,j,temp,flag=0;
    for (i = 0; i < 10; ++i) {
        scanf("%d", &a[i]);
    }
    for (i = 0; i < 9; ++i) {
        flag = 0;
        for (j = 0; j < 9 - i; ++j) {
            if (a[j] > a[j + 1]) {
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
                flag = 1;
            }
        }
        if (flag == 0) {
            break;
        }
    }
    for (i = 0; i < 10; ++i) {
        printf("%d\n", a[i]);
    }
    return 0;
}

I

空格或换行是使scanf结束一个输入

#include <stdio.h>

int main()
{
    int a[2][3], b[3][2],i,j;
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 3; ++j) {
            scanf("%d", &a[i][j]);
            b[j][i] = a[i][j];
        }
        getchar();
    }
    for (i = 0; i < 3; ++i) {
        for (j = 0; j < 2; ++j) {
            printf("%d ", b[i][j]);
        }
        printf("\n");
    }
    return 0;
}

J

strcmp函数

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

int main()
{
    char a[10], b[10], c[10];
    int max = 0;
    cin.getline(a, 10);
    cin.getline(b, 10);
    cin.getline(c, 10);
    if (strcmp(a, b) < 0) {
        max = 1;
        if (strcmp(a, c) < 0) {
            max = 2;
        }
    }
    switch (max) {
    case 0:printf("%s", a);
        break;
    case 1:printf("%s", b);
        break;
    case 2:printf("%s", b);
        break;
    }
    return 0;
}

100000570

数组直接作为参数,函数可改变其内容

A

参数为数组或者指针形式都可 数组第一维个数可以不写

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
void strReverse(char a[10]) {
    int i = 0,j;
    char temp;
    while (a[i] != '\0') {
        ++i;
    }
    for (j = 0; j < (i-1) / 2+1; ++j) {
        temp = a[j];
        a[j] = a[i-1 - j];
        a[i-1 - j] = temp;
       
    }

}
int main()
{
    char a[10];
    cin.getline(a, 10);
    strReverse(a);
    printf("%s", a);
    return 0;
}

B

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
void vowels(char s1[], char s2[]) {
    int i=0,j=0;
    while (s1[i] != '\0') {
        if (s1[i] == 'a' || s1[i] == 'e' || s1[i] == 'i' || s1[i] == 'o' || s1[i] == 'u' || s1[i] == 'A' || s1[i] == 'E' || s1[i] == 'I' || s1[i] == 'O' || s1[i] == 'U') {
            s2[j] = s1[i];
            ++j;
        }
        ++i;
    }
    s2[j] = '\0';
}
int main()
{
    char a[10],b[10];
    cin.getline(a, 10);
    vowels(a, b);
    printf("%s\n", b);
    return 0;
}

100000571

A

malloc函数头文件<stdlib.h>

也可以int a,b int *p=&a,*q=&b

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int* a=(int*)malloc(sizeof(int)),*b= (int*)malloc(sizeof(int)),temp;
    scanf("%d %d", a, b);
    if ((*b) > (*a)) {
        temp = *a;
        *a = *b;
        *b = temp;
    }
    printf("%d %d", *a, *b);//*a<*b?*b:*a
    return 0;
}

B

先对比前两个,再插入第三个

#include <stdio.h>
int main()
{
    int a, b, c,temp, * p = &a, * q = &b, * r = &c;
    scanf("%d %d %d", p,q,r);
    if ((*p) < (*q)) {
        temp = *p;
        *p = *q;
        *q = temp;
    }
    if ((*r) > (*q)) {
        temp = *q;
        *q = *r;
        *r = temp;
        if ((*q) > (*p)) {
            temp = *p;
            *p = *q;
            *q = temp;
        }  
    }
    printf("%d %d %d\n", *p, *q,*r);//(*p>*q?*p:*q)>*r?(*p>*q?*p:*q):*r
    return 0;
}

C

#include <stdio.h>
int main()
{
    const char *a = "I love China!";
    int n;
    scanf("%d", &n);
    printf("%s", a + n);
    return 0;
}

D

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
    char a[20], b[20], c[20], * p=a, * q=b, * r=c,*temp;
    cin.getline(a, 20);
    cin.getline(b, 20);
    cin.getline(c, 20);
    if (strcmp(p, q)>0) {
        p = b;
        q = a;
    }
    if (strcmp(q, r) > 0) {
        temp = q;
        q = r;
        r = temp;
        if (strcmp(p, q) > 0) {
            temp = q;
            q = p;
            p = temp;
        }
    }
    printf("%s\n%s\n%s\n", p, q, r);
    return 0;
}

E

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
void scanf10(int a[10]) {
    int i;
    for (i = 0; i < 10; ++i) {
        scanf("%d", &a[i]);
    }
}
void print10(int a[10]) {
    int i;
    for (i = 0; i < 10; ++i) {
        printf("%d ", a[i]);
    }
    printf("\n");
}
void process10(int a[10]) {
    int max = a[0], min = a[0],maxi=0,mini=0, i,temp;
    for (i = 1; i < 10; ++i) {
        if (max < a[i]) {
            max = a[i];
            maxi = i;
        }
        if (min > a[i]) {
            min = a[i];
            mini = i;
        }
    }
    temp =a[9];
     a[9]= a[maxi];
     a[maxi] = temp;
     temp = a[0];
     a[0] = a[mini];
     a[mini] = temp;
}
int main()
{
    int a[10], * p = a;
    scanf10(p);
    process10(p);
    print10(p);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sadnessdry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值