【C语言day08】

int n=5; int ann+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;
}
相关推荐
Wang's Blog10 分钟前
Go-Zero框架上手前奏2: 微服务核心要素 —— 拆分、通信与无状态设计
开发语言·微服务·golang
我是坏垠10 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant10 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
Bobolink_11 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
你怎么知道我是队长11 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
xingke11 小时前
C 语言多文件编程:(一)头文件、extern、编译链接
c语言·开发语言·多文件
戮漠summer12 小时前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
jinyishu_12 小时前
C++ string使用方法
开发语言·c++
EW Frontier12 小时前
三级跳突破864维动作空间——QMIX-Hierarchical多无人机协同通信方法全解析【附python代码】
开发语言·python·无人机·强化学习·通信资源分配