【C语言day08】

int n=5; int a[n][n+2]

复制代码
数组定义下角标不能为变量
注:C99标准中支持了使用变量
复制代码
本题考查的是二维数组的元素访问,A选项是 正确的,X[i]就是第i行的数组名,数组名表示首元素的地址,X[i]表示第i行的第一个元素的地址,+j后就是第i行下标为j的元素的地址,整体解引用就是X[i][j],A正确。
B选项因为[]的优先级高于*,所以代码相当于**((x+i)+j),X+i+j后就越界了,并不代表X[i][j],所以错误。
C选项也明显不对,X是二维数组的数组名,数组名相当于第一行的地址,X+i+j,跳过了i+j行,就越界了,C错误。
D选项是标准的指针形式访问二位数组的一个元素。

编写一个函数,计算字符串中含有的不同字符的个数。
字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。
不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

题目来源

c 复制代码
#include <stdio.h>

int main() {
    //先去输入一行字符串
    char a[501] = {0};
    scanf("%s",a);

    //int数组作为标记数组
    int ax[501] = {0};
    int i = 0;
    int sum = 0;

    //先去将字符串中出现的字符对应标记为1
    for(i=0;a[i]!='\0';i++){
        ax[a[i]] = 1;
    }

    //最后去遍历一遍查找标记为1的个数
    for(i=0;a[i]!='\0';i++){
        if(ax[a[i]]){
            sum++;
            ax[a[i]] = 0;
        }
    }
    printf("%d",sum);
    return 0;
}
c 复制代码
#include <stdio.h>
int main() {
    char tmp[501] = {0};
    while (~scanf("%s", tmp)) {
        char table[128] = {0}, *ptr = tmp;
        int count = 0;
        while (*ptr != '\0') {
            if (table[*ptr] !=
                    1) {//判断字符ascii值作为下标的位置是否被标记过,是否是重复字符
                count++; //当前字符的位置没有被标记过表示没有出现过,则计数+1
            } table[*ptr++] = 1;//将字符ascii值作为下标的位置进行标记置1
        }
        printf("%d\n", count);
    } return 0;
}

多数元素
题目来源

给定一个大小为 n 的数组 nums ,返回其中的多数元素。

多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

复制代码
一个数组中有一个数字出现次数大于 n/2 ,从第 0 个字符开始,假设它就是最多的那个数字,遇到相同的数字则
计数 +1 , 遇到不同的则计数 -1 ,其实就是互相消耗,等到计数为 0 的时候,表示本次互拼完毕,从下一个字符重
新开始互拼,但是归根结底出现次数大于 n/2 的这个数字数量更多,因此也是最后保留的字符。

示例: "23335" 首先从字符 2 开始计数 1 ,遇到 3 ,不同则 -1 ,互拼消耗 重新从剩下的 "335" 开始的过程,这时
候保存的字符为 3 ,遇到 3 则计数 +1 , 遇到5则计数 -1 ,在计数不为 0 时,走到末尾保存的字符就是个数超过
n/2 的字符
c 复制代码
int majorityElement(int* nums, int numsSize){
    
    int count = 1;
    int tmp = nums[0];

    for (int i = 1; i < numsSize; i++) {
        if (tmp == nums[i]){//与保存的字符相同则计数+1
            count++;
        } else {//与保存的字符不同则计数-1
            count--;
            //计数为0表示有可能保存的字符不是最多的字符,换下一个
            if (count == 0) tmp = nums[i + 1];
        }
    } 
    return tmp;
}
相关推荐
shykevin3 小时前
python开发Streamable HTTP MCP应用
开发语言·网络·python·网络协议·http
我不是程序猿儿3 小时前
【C#】 lock 关键字
java·开发语言·c#
漫路在线3 小时前
JS逆向-某易云音乐下载器
开发语言·javascript·爬虫·python
小辉懂编程4 小时前
C语言:51单片机实现数码管依次循环显示【1~F】课堂练习
c语言·开发语言·51单片机
醍醐三叶5 小时前
C++类与对象--2 对象的初始化和清理
开发语言·c++
Magnum Lehar6 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
Inverse1626 小时前
C语言_动态内存管理
c语言·数据结构·算法
Mcworld8576 小时前
java集合
java·开发语言·windows
成功人chen某6 小时前
配置VScodePython环境Python was not found;
开发语言·python
海绵宝宝贾克斯儿7 小时前
C++中如何实现一个单例模式?
开发语言·c++·单例模式