指针函数题:6-2查找星期(本题要求实现函数,可以根据下表查找到星期,返回对应的序号) 6-3 给数组排序,使数组从小到大排列(应用选择排序,使数组中的元素从小到大排列。)

6-2查找星期:本题要求实现函数,可以根据下表查找到星期,返回对应的序号

序号星期
0Sunday
1Monday
2Tuesday
3Wednesday
4Thursday
5Friday
6Saturday

函数接口定义:

int getindex( char *s );

函数getindex应返回字符串s序号。如果传入的参数s不是一个代表星期的字符串,则返回-1。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>

#define MAXS 80

int getindex( char *s );
int main()
{
    int n;
    char s[MAXS];
    scanf("%s", s);
    n = getindex(s);
    if ( n==-1 ) printf("wrong input!\n");
    else printf("%d\n", n);
    return 0;
}
/*在这里开始写你的代码*/

输入样例1:

Tuesday

输出样例1:

2

输入样例2:

today

输出样例2:

wrong input!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


解题代码

int getindex(char *s) {
        char*p[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
        int i;
        for(i=0;i<7;i++){
            if(strcmp(s,p[i])==0)
                return i;
}
        return -1;
}

解题思路

先建立一个数组指针,存放周日到周六,然后再用”strcmp“函数将字符一一进行比大小,若完全相同,则结果为0.


 6-3 给数组排序,使数组从小到大排列:应用选择排序,使数组中的元素从小到大排列

函数接口定义:

void sort(int *p, int n);

在这里解释接口参数。例如:其中 p 和 n 都是用户传入的参数。 n 是数组长度; p 指向数组元素首地址。

裁判测试程序样例:

#include<stdio.h>
void sort(int* p, int n);
//n 是数组长度; p 指向数组元素首地址
int main()
{
    int a[5];
    int* p = a;
    for (int i = 0; i < 5; i++)
    {
        scanf("%d", &a[i]);
    }
    sort(a, 5);
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", a[i]);
    }
}
/*在这里开始写你的代码*/

输入样例:

在这里给出一组输入。例如:

4 2 1 6 8

输出样例:

在这里给出相应的输出。例如:

1 2 4 6 8 

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


 解题代码

void sort(int* p, int n) {
    int temp, i, j;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            if (p[j] > p[j + 1]) {
                temp = p[j];
                p[j] = p[j + 1];
                p[j + 1] = temp;
            }
        }
    }
}

解题思路

这道题我用的是冒泡排序法,但其实这个效率不是很好,时间复杂度是O(n2),更快的方法也可以使用快速排序,这里是一个快速排序的b站视频,作为拓展可以了解一下

【全网最清晰快速排序,看完快排思想和代码全部通透,不通透你打我!】https://www.bilibili.com/video/BV1vP411g7J3?vd_source=b9de36505dd0073d0edd813c003c2c1d

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Louis Maos

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

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

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

打赏作者

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

抵扣说明:

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

余额充值