【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;
}
相关推荐
资源补给站1 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
6.941 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
FF在路上2 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
余额不足121382 小时前
C语言基础十六:枚举、c语言中文件的读写操作
linux·c语言·算法
众拾达人2 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
皓木.2 小时前
Mybatis-Plus
java·开发语言
不良人天码星2 小时前
lombok插件不生效
java·开发语言·intellij-idea
源码哥_博纳软云3 小时前
JAVA同城服务场馆门店预约系统支持H5小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
学会沉淀。3 小时前
Docker学习
java·开发语言·学习