• 算法试题——每日一练


    判断是否为回文数

    改变x的值进行测试即可。

    #include 
    #include 
    #include 
    
    bool isPalindrome(int x)
    {
        int base = 10,check = 0,num = 0;
        int *p=NULL;
        if(x < 0)
            return false;
        else if(x == 0)
            return true;
        else
        {
            if(x % 10 == 0)
                return false;
            else
            {
                while(x > 0)
                {
                    p = (int *) realloc (p,sizeof(int));
                    p[num] = x % 10;
                    x /= 10;
                    num++;
                    check++;
                }
            }
            for(int j = 0 ; j != check ; j++)
            {
                if(p[j] != p[check - 1 - j])
                    return false;
            }
            return true;
        }
    }
    
    int main()
    {
    	int x =121;
    	printf("%d",isPalindrome(x));
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    两数之和

    给定一个整数数组nums和一个整数目标值target,请你在该数组中找出 和为目标值target的那两个整数,并返回它们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

    #include 
    #include 
    #include 
    int* twoSum(int* nums, int numsSize, int target)
    {
        int i,j;
        int* returnarray = (int *) malloc (sizeof(int) * 2);
        for(i = 0 ; i < numsSize - 1 ; i++)
            for(j = i+1 ; j < numsSize ; j++)
                if(nums[i] + nums[j] == target && i!=j)
                {
                    returnarray[0] = i;
                    returnarray[1] = j;
                    return returnarray;
                }
        free(returnarray);
        return 0;
    }
    int main()
    {
    	int nums[4]={2,7,11,13},numsSize,target,*c;
    	numsSize=4;
    	target=9;
    	c=NULL;
    	c=twoSum(nums,numsSize,target);
    	printf("[%d,%d]",c[0],c[1]);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    罗马数字转换为整数

    罗马数字分别有 I , V , X , L , C , D , M I,V,X,L,C,D,M I,V,X,L,C,D,M。它的转换规则如下表:

    I I I V V V X X X L L L C C C D D D M M M
    1510501005001000

    它的计数方法如下:

    1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3
    2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12
    3. 小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9

    我们在转换的时候只需要知道一种思想即可:从一堆罗马数字的最右边开始,若最右边的前面一个大于它就相加,若小于,就减去就行了。
    例如: L V X I I I LVXIII LVXIII
    它的值为 1 + 1 + 1 + 10 − 5 + 50 = 58 1+1+1+10-5+50=58 1+1+1+105+50=58

    代码如下:

    #include 
    int romanToInt(char * s)
    {
        int num,sum = 0,p = 0;
        char t1[7] = {'I','V','X','L','C','D','M'};
        int t2[7] = {1,5,10,50,100,500,1000}; 
        for(num = 0 ; s[num] != '\0' ; num++);
        for(num - 1 ; num >= 0 ; num--)
        {
            for(int i = 0 ; i < 7 ; i++)
            {
                if(s[num] == t1[i])
                {
                    if(p <= i)
                        sum += t2[i];
                    else
                        sum -= t2[i];
                    p = i;
                    break;
                }
            }
        }
        return sum;
    }
    
    int main()
    {
    	char *s = "LVIII";
    	int sum = 0;
    	sum = romanToInt(s);
    	printf("%d",sum);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    2022.8.12

  • 相关阅读:
    【博客475】alertmanager集群如何同步数据
    springboot+vue+Elementui学生考勤在线请假系统
    仅作笔记用:Windows 11 通过 VBS 打开 IE 浏览器
    MySQL-锁
    03 【柱状图】
    [Codeforces] number theory (R1200) Part.9
    流水线作业模拟程序
    0928转置卷积
    git的介绍和安装、常用命令、忽略文件、分支
    GBASE 8s 通过light scan优化查询性能
  • 原文地址:https://blog.csdn.net/weixin_62917800/article/details/126307981