Day One 水题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a1128o/article/details/51957283

三角形

HDU 2039 http://acm.hdu.edu.cn/showproblem.php?pid=2039

给定三条边,请你判断一下能不能组成一个三角形。
Input
输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C。其中A,B,C <1000;
Output
对于每个测试实例,如果三条边长A,B,C能组成三角形的话,输出YES,否则NO。
Sample Input
2
1 2 3
2 2 2
Sample Output
NO
YES

一道学c语言就练过的一道题;总结一下代码总是通过不了的几点(坑点):
1、边长错用int类型,题目中输入只说三个正数,没有说整数,所以边长应为double型变量;
2、判断三边是否能组成一个三角形只看三边是否满足任意两边之和大于第三边的条件,在这里不用判断三边是否都大于0,因为题目中说了是正数(有时候根据题目可以避免考虑一些没必要考虑的输入范围);
3、输入用“%lf”,接收double型变量;
4、这一点非常重要,输出要求是全大写的“YES”和“NO”,所以你输出只能是全大写的,如果是全小写或者首字母大写都算结果错误,真的对于刚接触的人要特别注意,容易在这一点上犯浑。

#include <stdio.h>  
int main(){  
    double a, b, c;  
    int z;  
    scanf("%d", &z);  
    while ( z-- ){  
        scanf("%lf%lf%lf", &a, &b, &c);  
        printf("%s\n", a+b>c && a+c>b && b+c>a ? "YES" : "NO");  
    }  
    return 0;  
} 

空心三角形

HDU 2091 http://acm.hdu.edu.cn/showproblem.php?pid=2091

把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。
Input
每行包含一个字符和一个整数n (0<n<41) ,不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。如果遇到@字符,则表示所做出来的样板三角形已经够了。
Output
每个样板三角形之间应空上一行,三角形的中间为空。显然行末没有多余的空格。

看上去很简单,还是讲讲自己遇到的一些问题:
1、利用画图找出每行空格个数与打印字符位置的规律,然后就用最暴力的方法每一行打印出来;
2、但是提交的时候出现了如下错误:Presentation Error 介绍错误,就在网上查该错误的原因–首先可以肯定的是,思路没有错,输出结果也与标准输出结果非!常!接!近!出现这个错误最可能的原因是,在输出结果的后面,多了或少了没什么意义的空格,tab,换行符等等。所以,请先认真检查程序的输出结果是否与标准完!全!一!致!OJ平台对格式的检查可以说是非!常!严!格!但是自己检查了输出觉得没问题或者说不知道问题出在哪里

错误代码如下:

#include<stdio.h>

int main(){
    int n,i,j;
    char x;
    scanf("%c",&x);
    while(x != '@'){
        scanf("%d",&n);        //表示等腰三角形的高
        for(i = 1;i < n;i++){
            j = n-i;
            while(j--){        //第i行打印n-i个空格
                printf(" ");
            }
            printf("%c",x);    //打印c字符
            j = 2*i-3;
            if(i > 1){         //第一行为特殊情况,需单独考虑
                while(j--){        //再打印2*i-3个空格
                    printf(" ");
                }
                printf("%c",x);  //打印c字符
            }
            printf("\n");
        }
        j = 2*n-1;       //底边长为2n-1
        while(j--){
            printf("%c",x);
        }
        printf("\n");
        scanf("%c",&x);
    }
    return 0;
}

这是通过测试的代码,把输入输出都用cin和cout来实现,然后用了setw(n)这个方法,AC的代码比之前暴力输出的要简单美观得多。所以说自己也应该多了解并熟练使用一些函数方法,往往可以达到事半功倍的效果

setw(n) //头文件 #include<iomanip> 设置宽度 左对齐
setprecision(n)//设置浮点数字个数
#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    char a;
    int n,flag=0,i,s=1,j,k;
    while(cin>>a && a!='@'){ 
        cin>>n; 
        flag++;
        k = n;
        if(flag != 1) 
            cout<<endl;
        cout<<setw(n)<<a<<endl;   //第一行
        if(n != 1){
            for(j = 2;n != 2;n--){
                cout<<setw(n-1)<<a<<setw(j)<<a<<endl;
                j += 2;
            }
        for(i = 0;i< 2*k-1;i++)   //最后一行
            cout<<a;cout<<endl;
        }
    }
    return 0;
}

整数解

HDU 2092 http://acm.hdu.edu.cn/showproblem.php?pid=2092

有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,也就是这种整数到底存不存在,实在有点吃不准,你能快速回答吗?看来只能通过编程。
例如:
x + y = 9,x * y = 15 ? 找不到这样的整数x和y
1+4=5,1*4=4,所以,加起来等于5,乘起来等于4的二个整数为1和4
7+(-8)=-1,7*(-8)=-56,所以,加起来等于-1,乘起来等于-56的二个整数为7和-8
Input
输入数据为成对出现的整数n,m 10000<n,m<10000 ,它们分别表示整数的和与积,如果两者都为0,则输入结束。
Output
只需要对于每个n和m,输出“Yes”或者“No”,明确有还是没有这种整数就行了。
Sample Input
9 15
5 4
1 -56
0 0
Sample Output
No
Yes
Yes

1、利用暴力枚举法来判断是否存在这样的整数,在判断时要注意输入的数据可正可负,要加绝对值判断大小,还有要注意负负得正->if(y/i + i == x || y/(-i) + (-i) == x);
2、严格按照题目要求来标准输入和输出,同时注意题目输入结束的条件!

#include<stdio.h>
#include<math.h>
int f(int x,int y){  //判断是否存在满足要求的整数对
    int i;
    for(i = 1;i <= abs(y);i++){
        if(abs(y)%i == 0){
            if(y/i + i == x || y/(-i) + (-i) == x)
            return 1;
        }
    }
    return 0;
}
int main(){
    int x,y;
    scanf("%d%d",&x,&y);
    while(!(x == 0 && y == 0)){
        if(f(x,y) == 1){
            printf("Yes\n");
        }
        else{
            printf("No\n");
        }
        scanf("%d%d",&x,&y);
    }
    return 0;   
}

Olympiad

HDU 5327 http://acm.hdu.edu.cn/showproblem.php?pid=5327

You are one of the competitors of the Olympiad in numbers. The problem of this year relates to beatiful numbers. One integer is called beautiful if and only if all of its digitals are different (i.e. 12345 is beautiful, 11 is not beautiful and 100 is not beautiful). Every time you are asked to count how many beautiful numbers there are in the interval [a,b] (a≤b). Please be fast to get the gold medal!

Input
The first line of the input is a single integer T (T≤1000), indicating the number of testcases.

For each test case, there are two numbers a and b, as described in the statement. It is guaranteed that 1≤a≤b≤100000.

Output
For each testcase, print one line indicating the answer.

Sample Input
2
1 10
1 1000
Sample Output
10
738

讲真英文题不能每次都靠百度。题目是说当一个整数所有位置上的数字都不相同时则为漂亮数,现在给你一个区间,求出该区间内有多少漂亮数
判断一个整数是否每位数字都不相同:设置一个计数标志数组,表示每位数字出现的次数,利用除10取余依次取出该数字的最低位,在计数数组相应位置+1,如果某数字出现次数大于1,则不是漂亮数

#include<stdio.h>

int f(int a,int b){
    int i,n,count = b-a+1;
    for(i = a;i <= b;i++){     //扫描
        int flag[10] = {0};        //初始化为0
        n = i;
        while(n){
            flag[n%10] = flag[n%10]+1;       //标志位加一
            if(flag[n%10] > 1){ //不是漂亮数
               count--;
               break;
            }
            n /= 10;
        }
    }
    return count;
}

int main(){
    int t,i,a,b;
    scanf("%d",&t);
    for(i = 0;i < t;i++){
        scanf("%d%d",&a,&b);
        printf("%d\n",f(a,b));
    }
    return 0;
}

鸡兔同笼

OpenJ_Bailian 2750 http://bailian.openjudge.cn/practice/2750?lang=en_US

一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。
Input
一行,一个正整数a (a < 32768)。
Output
一行,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开。
如果没有满足要求的答案,则输出两个0,中间用一个空格分开。
Sample Input
20
Sample Output
5 10

最少的动物数 = 兔子尽可能地多 =max{全是兔子,全是兔子+一只鸡};
最多的动物数 = 全是鸡

include <stdio.h>

int max(int a){
    return a/2;
}
int min(int a){
    if(a%4 == 0){
        return a/4;
    }
    else{
        return (a-2)/4+1;
    }
}

int main(){
    int a,mina,maxa;
    scanf("%d",&a);
    if(a%2 == 0){
        mina = min(a);
        maxa = max(a);
        if(mina <= maxa){
            printf("%d %d\n",mina,maxa);
            return 0;
        }
    }
    printf("%d %d\n",0,0);
    return 0;
}

第一天的博客拖到第二周才完成~~现在感觉题目是比较水,但是我相信当时做题的时候肯定也出现了很多坑

猜你喜欢

转载自blog.csdn.net/a1128o/article/details/51957283