• 2019年1月30日训练日记


    今天写的有取绝对值问题,越界处理问题,二个奇数次问题,字符串所在位置问题(字符所在位置问题就不注明了)

    先把之前的“越界了吗”这个问题写上:

    2101 越界了吗

    输入两个int范围内的整数a和b,
    你需要判断如果a和b都是用int类型存储的,a+b在C++中是否越界了(也就是结果是否还在int范围内)。
    注意越界有上界和下界。
    输入
    一行两个整数a和b
    输出
    如果越界了,输出Yes
    否则输出No
    输入样例

    2147483647 1
    

    输出样例

    Yes
    

    解题之前先写一下有关取绝对值的知识点:

    abs、fabs、fabsf三个函数都是用来求一个数的绝对值,区别如下:
    1)int abs(int a); // 处理int类型的取绝对值
    2)double fabs(double a); //处理double类型的取绝对值
    3)float fabsf(float a); //处理float类型的取绝对值

    代码如下:

    代码一:

    #include <bits/stdc++.h> 
    using namespace std;
    int main()
    {
    	long long a,b;
    	long long max,min,c;
    	max = INT_MAX;
    	min = INT_MIN;
    	cin >> a >> b;
    //	cout << a << "  " << b <<endl;
    /*	while (!(a<=max && a >=min && b<=max && b>=min ))
    		{
    		cout << "input out of range";
    		cin >> a >> b; 
    		}*/
    	c = a + b;
    //	cout << max <<endl << c << endl << min <<endl;  
    	if (c > max || c < min)
    	{
    		cout << "Yes";
    	}
    	else
    	{
    		cout << "No";
    	}
    	return 0;
    }
    

    利用函数直接确定int 的最大值与最小值。
    代码二:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int a,b,c,m,n,o;
        cin>>a>>b;
        c=a+b;m=a%10;n=b%10;o=c%10;
        if(fabs(a)>fabs(b)) swap(a,b);
        if(b>0&&c<0||b<0&&c>0) cout<<"Yes";
        else if(m+n!=o||(m+n)%10!=o) cout<<"Yes";
        else cout<<"No";
    return 0;
    }
    

    利用分别取余来计算。

    再写一个之前的“二个奇数次”问题:

    2107 二个奇数次

    输入一个长度为n的数组,考虑所有不同的数字,有且只有2个数字出现了奇数次。

    比如对于1 2 3 1 2 3 1 2,我们考虑所有不同的数字1 2 3,有且只有1,2出现了奇数次(均为3次)

    输出这两个出现了奇数次的数字。

    先输出这两个数字中较小的,再输出较大的。

    1 <= n <= 100000

    1 <= a[i] <= 10^9

    输入
    第一行一个整数n,
    接下来一行n个整数,表示输入的数字。
    输出
    一行2个数字,表示出现了奇数次的数字,先输出小的,再输出大的。
    输入样例

    8
    1 2 3 1 2 3 1 2
    

    输出样例

    1 2
    

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int b,c,i,m,n,o=0,d=0,e=0,f=5,g;
        scanf("%d",&n);int a[n];
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        sort(a,a+n);
        for(i=0;i<n;i++)
        {
            if(a[i]==a[i+1]) i++;
            else if(o==0) {o++;printf("%d",a[i]);}
            else if(o==1) {printf(" %d",a[i]);break;}
        }
    return 0;
    }
    

    利用偶数特点,直接跳过相等的数的第二个值: if(a[i]==a[i+1]) i++;(因为在for循环中i的下一次循环本身就该加1),这样就可以只捕获奇数次的值。

    再写一个字符串的问题:

    2149 字符串出现位置

    给你两个字符串,一个母串,一个子串,请你找出子串第一次在母串中出现的位置。如果子串没有在母串中出现过,则输出-1。
    例如子串ab在母串dceab中第一次出现的位置是3,而子串abc则在dceab中没有出现过。
    输入
    第一行一个字符串(母串),保证每个字符都是小写字母。
    第二行一个字符串(子串),保证每个字符都是小写字母。
    保证两个字符串的长度都不超过10000,并且大于0。
    输出
    一行一个整数,表示子串第一次在母串中出现的位置。假如子串没有在母串中出现过,则输出-1。

    输入样例

    decdagee
    age
    

    输出样例

    4
    

    代码如下:(我写的有点乱,也有点复杂。。。不过好像运行效率还可以。。。)

    #include<iostream>
    #include<stdio.h>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<string>
    #include<vector>
    #include<iomanip>
    using namespace std;
    char a[10001],b[10001],c[10001];
    int main()
    {
        int s=0,y=0,h=0;
        gets(a);gets(b);
        for(int i=0;i<strlen(a);i++)
        {
            if(b[0]==a[i])
            {
               for(int j=i;j<i+strlen(b);j++)
                    {
                        c[h]=a[j];
                        h++;
                    }
                for(int x=0;x<strlen(b);x++)
                {
                    if(b[x]==c[x])
                    {
                        y++;
                    }
                }
                if(y==strlen(b))
                {
                        s++;
                     cout<<i<<endl;
                     break;
                }
    
            }
            h=0;
            y=0;
        }
        if(s==0)
        cout<<"-1";
        return 0;
    }
    

    注意的问题:h,y等最后一定要清零。。。

  • 相关阅读:
    WCF服务编程设计规范
    键盘虚拟键值编码表 使用keybd_Event
    RealTime Executive (REX)使用手册
    SQL Server函数大全(一)
    Windows Mobile常用程序代码(串口、图象、网络、3D、数据库、音频视频等等)
    python写简单爬虫的五种方法 (转)
    配置eclipse+PyDev(转) & 解决Eclipse中文乱码
    HDU 4003 Find Metal Mineral (树形DP)
    HDU 1054 Strategic Game
    HDU 4548 美素数 (线段树)
  • 原文地址:https://www.cnblogs.com/study-hard-forever/p/12130071.html
Copyright © 2020-2023  润新知