51nod参考答案

算术运算

  • 2393 取余
 #include 
	
    main() {
        
		int x,y;
        scanf("%d%d",&x,&y);
        printf("%d",x%y);
    }
  • 2394 四则运算1
#include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int sum = 0;
        for(int i=0;i<n;++i){
            int m;
            scanf("%d",&m);
            if(m<0) continue;
            sum += m;
            
        }
        printf("%d",sum);
    
        return 0;
    }
  • 2395 函数1
 #include 
    
    int main(){
        // x^2+2*x+5
        int x;
        scanf("%d",&x);
        printf("%d\n",x*x+2*x+5);
        return 0;
    }
  • 2396 圆的面积
 #include 
    
    int main(){
        float r;
        scanf("%f",&r);
        printf("%f",3.14159*r*r);
    }
    

比较运算

  • 2397 直角三角形
 #include 
    
    int main(){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        printf("%d",a*a+b*b==c*c);
    }

变量

  • 2398 数字交换
  #include 
    
    int main(){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        int temp = a;
        a = b;
        b = c;
        c = temp;
        printf("%d %d %d",a,b,c);
    }

if

  • 2104 奇偶性 注意正负值
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        printf("%d",abs(n%2));
    
        return 0;
    }
  • 2399 输出条件1
 #include 
    
    int main(){
        int a,b;
        scanf("%d%d",&a,&b);
        printf("%d\n",a+b>10?a*b:a-b);
    }
  • 2400 输出条件2
 #include 
    
    int main(){
        int a,b;
        scanf("%d%d",&a,&b);
        if(a+b<0){
            printf("negative");
        }else if(a+b>=4){
            printf("NO");
        }else{
            printf("YES");
        }
    }
  • 2402 输出条件3
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int count=0;
        while(n%2){
            ++count;
            n/=2;
        }
        printf("%的、n",n);
        return 0;
    }
    

  • 2410 分数评级
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int res = 0;
        for(int i=0;i<4;++i){
            res = res*10 + n%10;
            n /=10;
        }
        printf("%d",res);
    
        return 0;
    }
    

  • 2050 年龄判断
   int main() {
        int n;
        scanf("%d",&n);
        if(0<=n && n<=3){
            printf("infant");
        }else if(4<=n && n<=12){
            printf("child");
        }else if(13<=n && n<=18){
            printf("youngster");
        }else if(19<=n && n<=25){
            printf("youth");
        }
        return 0;
    }
    

switch

  • 2401 首字母
 #include 
    
    int main(){
        char c;
        scanf("%c",&c);
        switch(c){
            case 'a':
            printf("apple");
            break;
            case 'b':
            printf("banana");
            break;
            case 'c':
            printf("cat");
            break;
            default:
            printf("no");
        }
    }
    
  • 2403 求和
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int a,b;
        scanf("%d%d",&a,&b);
        switch(a+b){
            case 1:printf("one\n");break;
            case 2:printf("two\n");break;
            case 3:printf("three\n");break;
            case 4:printf("four\n");break;
            case 5:printf("five\n");break;
            case 6:printf("six\n");break;
            case 7:printf("seven\n");break;
            case 8:printf("eight\n");break;
            case 9:printf("nine\n");break;
            default:printf("None\n");
        }
        return 0;
    }
  • 2105 年月天数
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n,m;
        scanf("%d%d",&n,&m);
        int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        printf("%d",m==2&&n%4==0&&n%100!=0||n%400==0?29:days[m-1]);
        return 0;
    }

while

  • 2404 2的幂整除
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int count = 0;
        while(n%2 == 0){
            n/=2;
            ++count;
        }
        printf("%d\n",count);
    
        return 0;
    }
    

while/for

  • 2086 循环输出
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            printf("%d\n",i);
        }
    
        return 0;
    }
  • 2087 循环判断输出
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        for(int i=3;i<=n;++i)
            if(i%3 == 0)
                printf("%d\n",i);
        
        return 0;
    }
  • 2090 幸运数字
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int has = 0;
        while(0 != n){
            if(n%10 == 7){
                has = 1;
                break;
            }
            n /= 10;
        }
        printf(has?"Yes":"No");
    
        return 0;
    }
    
  • 2056 素数判断
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int primer = 1;
        for(int i=2;i<n;++i){
            if(n%i == 0){
                primer = 0;
                break;
            }
        }
        printf(primer?"Yes":"No");
    
        return 0;
    }
  • 2057 输出最小值
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int min;
        scanf("%d",&min);
        while(--n){
            int m;
            scanf("%d",&m);
            min = min>m?m:min;
        }
        printf("%d",min);
    
        return 0;
    }
  • 2093 求最值
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int max,min;
        scanf("%d",&max);
        min = max;
        while(--n){
            int m;
            scanf("%d",&m);
            if(max < m) max = m;
            if(min > m) min = m;
        }
        printf("%d %d",min,max);
    
        return 0;
    }
  • 2094 前缀和
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        printf("%d\n",n);
        int res = 0;
        while(n--){
            int temp;
            scanf("%d",&temp);
            res += temp;
            printf("%d\n",res);
        }
    
        return 0;
    }
  • 2059 上台阶
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int a = 1;
        int b = 1;
        for(int i=3;i<=n;++i){
            int tmp = a+b;
            a = b;
            b = tmp;
        }
        printf("%d",b);
    
        return 0;
    }
  • 2111 倒序输出
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int a,b;
        scanf("%d%d",&a,&b);
        for(int i=b;i>=a;--i){
            printf("%d\n",i);    
        }
        return 0;
    }
  • 2110 求和
 #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int res = 0;
        while(n--){
            int m;
            scanf("%d",&m);
            res += m;
        }
        printf("%d",res);
    
        return 0;
    }
  • 2137 数列计算
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int a = 4;
        int b = 7;
        float sum = 4.0/7.0;
        for(int i=1;i<n;++i){
            int temp = a+b;
            a=b;
            b=temp;
            sum += 1.0*a/b;
        }
        printf("%d/%d\n %.2f",a,b,sum);
    
        return 0;
    }
  • 2405 阶乘
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int res = 1;
        for(int i=1;i<=n;++i){
            res *= i;
        }
        printf("%d\n",res);
    
        return 0;
    }
  • 2406 非负数和
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int res=0;
        for(int i=0;i<n;++i){
            int m;
            scanf("%d",&m);
            if(m<0) break;
            res += m;
            
        }
        printf("%d",res);
    
        return 0;
    }
  • 2407 分数求和
#include 
#include 
#include 
#include 

int main() {
    int n;
    scanf("%d",&n);
    float ans = 0;
    for(int i=1;i<=n;++i){
        ans += 1.0/i;
    }
    printf("%f",ans);

    return 0;
}
  • 2408 质数判断
#include 
#include 
#include 
#include 

int main() {
    int n;
    scanf("%d",&n);
    int prime=1;
    for(int i=2;i<n;++i){
        if(n%i == 0){
            prime = 0;
            break;
        }
    }
    printf(prime?"yes":"no");

    return 0;
}
  • 2409 倍数个数
#include 
#include 
#include 
#include 

int main() {
    int n;
    scanf("%d",&n);
    int cnt = 0;
    for(int i=1;i<=n;++i){
        if(i%2==0 || i%3==0 || i%5==0){
            ++cnt;
        }
    }
    printf("%d",cnt);

    return 0;
}
  • 2411 数字反写
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int res = 0;
        for(int i=0;i<4;++i){
            res = res*10 + n%10;
            n /=10;
        }
        printf("%d",res);
    
        return 0;
    }
  • 2415 分数求和2
#include 
#include 
#include 
#include 

int main() {
    int n;
    scanf("%d",&n);
    float res = 0;
    for(int i=1;i<=n;++i){
        res+= 1.0/(i%2?i:-i);
    }
    printf("%f",res);

    return 0;
}
  • 2417 分数求和3 注意精确到小数点后10位
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        double res=0;
        int fact = 1;
        for(int i=1;i<=n;++i){
            fact *= i;
            res += 1.0/fact;
        }
        printf("%.10f\n",res);
    
        return 0;
    }
  • 2416 9的个数
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int res = 0;
        for(int i=1;i<=n;++i){
            if(i%10==9) ++res;
            if(i/10==9) ++res;
        }
        printf("%d",res);
    
        return 0;
    }
  • 2418 最大的质数
#include 
#include 
#include 
#include 

int main() {
    int n;
    scanf("%d",&n);
    n--;
    while(1){
       int prime = 1;
       for(int i=2;i<n;++i){
           if(n%i==0){
               prime = 0;
               n--;
               break;
           }
       } 
       if(prime){
           break;
       }
    }
    printf("%d",n);

    return 0;
}
  • 2419 回文数
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int temp = 0;
        int m = n;
        while(0 != m){
            temp = temp*10 + m%10;
            m /= 10;
        }
        printf(n==temp?"yes":"no");
    
        return 0;
    }
    
  • 2420 正数的和
#include 
#include 
#include 
#include 

int main() {
    int n;
    scanf("%d",&n);
    int sum = 0;
    for(int i=0;i<n;++i){
        int m;
        scanf("%d",&m);
        if(m<0) continue;
        sum += m;
        
    }
    printf("%d",sum);

    return 0;
}

双重循环

  • 2412 九九乘法表
#include 
#include 
#include 
#include 

int main() {
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        for(int j=1;j<=i;++j){
            printf("%d*%d=%d ",j,i,j*i);
        }
        printf("\n");
    }
    return 0;
}
    
  • 2089 打印九九乘法表
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            for(int j=1;j<=n;++j){
                printf("%d*%d=%d",i,j,i*j);
                if(j != n) printf("\t");
            }
            printf("\n");
        }
    
        return 0;
    }
  • 2413 图形输出1
#include 
#include 
#include 
#include 

int main() {
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;++i){
        for(int j=0;j<=i;++j){
            printf("*");
        }
        printf("\n");
    }

    return 0;
}
  • 2414 图形输出2
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;++i){
            for(int j=0;j<i*2+1;++j){
                printf("*");
            }
            printf("\n");
        }
    
        return 0;
    }
  • 2088 打印星塔
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            for(int j=0;j<n-i;++j) printf(" ");
            for(int j=0;j<2*i-1;++j) printf("*");
            printf("\n");
        }
    
        return 0;
    }
  • 2091 幸运数们
#include 
#include 
#include 
#include 

int main() {
    int L,R;
    scanf("%d%d",&L,&R);
    int none = 1;
    for(int i=L;i<=R;++i){
        int temp = i;
        while(0 != temp){
            if(temp%10 == 7){
                none = 0;
                printf("%d\n",i);
                break;
            }
            temp /= 10;
        }
    }
    if(1 == none){
        printf("None");    
    }
    
    return 0;
}
  • 2122 分解质因数
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        for(int i=2;i<=n;++i){
            while(n%i == 0){
                printf("%d\n",i);
                n /= i;
            }
        }
    
        return 0;
    }
  • 2145 打印月份
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int y,m,n;
        scanf("%d%d%d",&y,&m,&n);
        int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        
        if(y%4==0&&y%100!=0||y%400==0){
            days[1] = 29;
        }
        
        int dist = 0;
        for(int i=0;i<m-1;++i){
            dist += days[i];
        }
        int day = (dist+n)%7;
        printf("S   M   T   W   T   F   S\n",n);
        for(int i=0;i<day;++i){
            printf("    ");
        }
        for(int i=1;i<=days[m-1];++i){
            printf("%d",i);
            printf((day+i)%7 == 0?"\n":i>9?"  ":"   ");
        }
        return 0;
    }

数字处理

  • 2135 价钱统计 浮点数误差处理
#include 
#include 
#include 
#include 

int main() {
    // 西瓜、桃子、葡萄、苹果
    float watermelon,peach,grape,apple;
    scanf("%f%f%f%f",&watermelon,&peach,&grape,&apple);
    float price_watermelon = watermelon*1.2;
    float price_peach = peach*3.5;
    float price_grape = grape*4.5;
    float price_apple = apple*5.0;
    printf("%.1f\n",price_watermelon+0.01);
    printf("%.1f\n",price_peach+0.01);
    printf("%.1f\n",price_grape+0.01);
    printf("%.1f\n",price_apple+0.01);
    printf("%.1f\n",price_watermelon+price_peach+price_grape+price_apple+0.01);

    return 0;
}
  • 2118 完全平方数 浮点数转整数或者循环处理
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int a = sqrt(n);
        a*a == n?printf("%d",a):printf("No");
    
        return 0;
    }
    
  • 2101 越界了吗 整数溢出
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int x,y;
        scanf("%d%d",&x,&y);
        int sum=x+y;
        printf(
            (x < 0 && y < 0 && sum >= 0)
            ||(x > 0 && y > 0 && sum <= 0)
            ?"Yes":"No");
        return 0;
    }
  • 2119 吃龙虾 注意整数溢出
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n,m;
        scanf("%d%d",&n,&m);
        long long res = 0;
        while(n--){
            int ai;
            scanf("%d",&ai);
            if(ai>=m){
                res+=ai;
            }
        }
        printf("%lld",res);
    
        return 0;
    }

进制

  • 2102 或减与 注意操作符优先级
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int a,b;
        scanf("%d%d",&a,&b);
        printf("%d",(a|b)-(a&b));
        return 0;
    }
  • 2112 转二进制 使用短除法
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        while(0!=n){
            printf("%d",n%2);
            n >>= 1;
        }
        return 0;
    }
  • 1922 乘法
 #include 
    #include 
    #include 
    #include 
    
    int toDec(int n,int base){
        int res = 0;
        int c = 0;
        while(n){
            int t = n%10;
            if(t >= base) return -1;
            res += t*pow(base,c);
            n /= 10;
            ++c;
        }
        return res;
    }
    
    int main() {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        int res = 0;
        for(int i=2;i<=16;++i){
            int n = toDec(a,i);
            int m = toDec(b,i);
            int p = toDec(c,i);
            if(n*m==p){
                res = i;            
                break;
            }
        }
        printf("%d",res);
        return 0;
    }
  • 2121 转二进制2 短除法(注意整数溢出)或者使用函数itoa
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int pos = 0;
        char res[40];
        while(0!=n){
            res[pos++] = '0'+n%2;
            n /= 2;
        }
        for(int i=pos-1;i>=0;--i){
            printf("%c",res[i]);    
        }
        
        return 0;
    }
  • 2130 进制转换 ASCII编码\进制转换\数字转字符串或者使用函数itoa
 #include 
    
    int main(){
        int n,b;
        scanf("%d%d",&n,&b);
        
        char table[17] = "0123456789ABCDEF";
        char s[32] = {0};
        int i = 0;
        do{
            int t = n%b;
            //printf("%c",table[t]);
            s[i] = table[t];
            ++i;
            n /= b;
        }while(n != 0);
        // 逆序打印
        int j;
        for(j=0;j<i/2;++j){
            char t = s[j];
            s[j] = s[i-1-j];
            s[i-1-j] = t;
        }
        printf("%s\n",s);
    }

多重循环

  • 1956 费马大定理扩展
#include 
#include 
#include 
#include 

int main() {
    int n;
    scanf("%d",&n);
    int flag = 1;
    for(int o=2;o<=n;++o)
        for(int r=2;r<o;++r)
            for(int s=r+1;s<o;++s)
                for(int t=s+1;t<o;++t)
                    if(pow(r,3)+pow(s,3)+pow(t,3) == pow(o,3)){
                        printf("(%d,%d,%d,%d)\n",o,r,s,t);
                        flag = 0;
                    }
    if(flag) printf("OMG\n");

    return 0;
}
    

数组

  • 2092 翻转数组
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int arr[n];
        int size = n;
        while(--n >= 0){
            scanf("%d",&arr[n]);
        }
        printf("%d\n",size);
        for(int i=0;i<size;++i){
            printf("%d\n",arr[i]);    
        }
    
        return 0;
    }
  • 1911 收金币 遍历求和
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int arr[n];
        int sum = 0;
        for(int i=0;i<n;++i){
            scanf("%d",&arr[i]);
            sum += arr[i];
        }
        if(sum%2==1){
            printf("No");
            return 0;
        }
        int pre = 0;
        for(int i=0;i<n;++i){
            pre += arr[i];
            if(pre == sum/2){
                printf("Yes");
                return 0;
            }
            if(pre > sum/2){
                printf("No");
                return 0;
            }
        }
        
        return 0;
    }
  • 1955 过欠判断
 #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        int arr[n];
        for(int i=0;i<n;++i){
            scanf("%d",&arr[i]);
        }
        for(int i=0;i<n;++i){
            if(1 == arr[i]){
                printf("Q\n");
                continue;
            }
            int sum = 1;
            for(int j=2;j<arr[i];++j){
                if(arr[i]%j == 0)
                    sum += j;
            }
            if(sum == arr[i]) printf("E\n");
            else if(sum > arr[i]) printf("G\n");
            else printf("Q\n");
        }
        
        return 0;
    }
  • 1959 好事成双
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int arr[1000];
        int len=0;
        while(1){
            scanf("%d",&arr[len++]);
            if(0 == arr[len-1]) break;
        }
        int c=0;
        for(int i=0;i<len-1;++i){
            for(int j=i;j<len;++j){
                if(arr[i] == 2*arr[j] 
                || 2*arr[i] == arr[j])
                    ++c;
            }
        }
        printf("%d",c);
    
        return 0;
    }
    

数组:记录用法

  • 1912 咖啡馆 遍历字符串+ASCI数组记录
  #include 
    #include  // bool true false
    int main(){
        int n;
        scanf("%d",&n);
        char s[100];
        scanf("%s",s);
    
        // 定义座位
        int seat_nums = n;// 当前有多少位置空着
        // 定义记录表
        int record[26] = {0};
    
        int count = 0;// 未接收到服务的人数
        for(int i=0;'\0'!=s[i];++i){
            char c = s[i];
            int no = c-'A';// 字符对应的记录表的下标
            // 出
            if(record[no] == 1){
                record[no] = 0;
                ++seat_nums;
                continue;
            }else{// 入
                if(seat_nums == 0){ // 没有座位
                    ++count;
                    ++i;
                }else{
                    --seat_nums;
                    record[no] = 1;
                }
            }
        }
    
        printf("%d\n",count);
    }
  • 1915 西湖游船 数组记录
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n,m,W;
        scanf("%d%d%d",&n,&m,&W);
        
        int weights[n+1];
        for(int i=1;i<=n;++i){
            scanf("%d",&weights[i]);
        }
        
        int records[n+1];
        memset(records,0,(n+1)*sizeof(int));
        
        int total = 0;
        int max = 0;
        for(int i=0;i<m;++i){
            int index;
            scanf("%d",&index);
            if(records[index] == 0){
                records[index] = 1;
                total +=weights[index];
                max = max < total?total:max;
                if(max > W){
                    printf("Oh, My God!");
                    return 0;
                }
                
            }else{
                records[index] = 0;
                total -=weights[index];
            }
        }
        
        printf("%d",max);
    
        return 0;
    }
    
  • 2113 丢失的数字
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n,m;
        scanf("%d%d",&n,&m);
        int arr[n+1];
        memset(arr,0,(n+1)*sizeof(int));
        while(m--){
            int t;
            scanf("%d",&t);
            arr[t]++;
        }
        for(int i=1;i<=n;++i){
            if(arr[i] == 0) printf("%d\n",i);
        }
        return 0;
    }
  • 2114 多出的数字
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n,m;
        scanf("%d%d",&n,&m);
        int arr[n+1];
        memset(arr,0,(n+1)*sizeof(int));
        while(m--){
            int t;
            scanf("%d",&t);
            arr[t]++;
        }
        for(int i=1;i<=n;++i){
            if(arr[i] > 1) 
                printf("%d %d\n",i,arr[i]);
        }
    
        return 0;
    }

字符串

  • 2150 字符替换
#include 
    #include 
    #include 
    #include 
    
    int main() {
        char str[10001];
        scanf("%s",str);
        for (int i=0;'\0' !=str[i];++i) {
            if(str[i]>='0' && str[i]<='9'){
                str[i]='*';         
            }
        }
        printf("%s",str);
    
        return 0;
    }
  • 2153 字典序
#include 
    #include 
    #include 
    #include 
    
    int main() {
        char a[10000],b[10000];
        scanf("%s%s",a,b);
        printf(strcmp(a,b)<0?"YES":"NO");
    
        return 0;
    }
    
  • 2148 字符出现位置
  #include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        char str[10001];
        scanf("%s\n",str);
        char c;
        scanf("%c",&c);
        int pos = -1;
        for(int i=0;'\0' != str[i];++i){
            if(c == str[i]){
                pos = i;
                break;
            }
        }
        printf("%d",pos);
        return 0;
    }
  • 2149 字符出现位置
#include 
    #include 
    #include 
    #include 
    
    int main() {
        char a[10001],b[10001];
        scanf("%s\n%s",a,b);
        char* p = strstr(a,b);
        printf("%d",NULL == p?-1:p-a);
        return 0;
    }
  • 1950 数据的存储 gets()scanf()
#include 
    
    int main(){
        char s[2048] = {'\0'};
        char t[2048] = {'\0'};
        // scanf("%s",s);
        gets(s);
        int count = 0;
        for(int i=0,j=0;'\0'!=s[i];++i,++j){
            if('"' == s[i]){
                ++count;
                if(count%2==1){ // ``
                    t[j] = '`';
                    ++j;
                    t[j] = '`';
                }else{// ''
                    t[j] = '\'';
                    ++j;
                    t[j] = '\'';
                }
            }else{
                t[j] = s[i];
            }
        }
        printf("%s\n",t);
    }

多维数组/结构体

  • 1887 颜色精简 注意处理Z大于180的情况。
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);  
        int table[n][3];
        for(int i=0;i<n;++i){
            scanf("%d%d%d"
            ,&(table[i][0]),&(table[i][1]),&(table[i][2]));
        }
        int test[100][3];
        int r,g,b;
        int m=0;
        while(1){
            scanf("%d%d%d",&r,&g,&b);
            if(r==-1 && g==-1 && b==-1)break;
            long long min = LONG_LONG_MAX;
            for(int i=0;i<n;++i){
                int dist = 
                    pow(r-table[i][0],2)+
                    pow(g-table[i][1],2)+
                    pow(b-table[i][2],2);
                if(dist < min){
                    min = dist;
                    test[m][0] = table[i][0];
                    test[m][1] = table[i][1];
                    test[m][2] = table[i][2];
                }
            }
            ++m;
        }
        for(int i=0;i<m;++i){
            printf("(%d,%d,%d)\n",test[i][0],test[i][1],test[i][2]);
        }
        return 0;
    }
  • 1916 购物 注意处理Z大于180的情况。
#include 
    #include 
    #include 
    #include 
    
    #define M_PI 3.1415926
    int main() {
        int n;
        scanf("%d",&n);
        int data[n][3];
        for(int i=0;i<n;++i){
            scanf("%d%d%d",
            &data[i][0],&data[i][1],&data[i][2]);
        }
        for(int i=0;i<n;++i){
            printf(data[i][1]*5 >= 2*2*M_PI*data[i][0]*(data[i][2]>180?360-data[i][2]:data[i][2])/360?"Yes\n":"No\n");
        }
    
        return 0;
    }
    
  • 1957 幼儿园霸王
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        char maxName[8];
        char minName[8];
        int maxValue = INT_MIN;
        int minValue = INT_MAX;
        int l,w,h;
        char name[8];
        while(n--){
            scanf("%d%d%d%s\n",&l,&w,&h,&name);
            int value = l*w*h;
            if(value > maxValue){
                maxValue = value;
                strcpy(maxName,name);
            }
            if(value < minValue){
                minValue = value;
                strcpy(minName,name);
            }
        }
        printf("%s %s",maxName,minName);
    
        return 0;
    }

数组+函数

  • 1917 吃葡萄 函数模拟+数组预存数据
#include 
    #include 
    int eatGraph(int n){
        for(int i=n;i>1;--i){       // 人数i从n到2进行判断
            int t = n;              // 保存葡萄数
            bool ok = true;         // 假设能够完美分配
            for(int j=0;j<i;++j){   // 模拟i人分葡萄
                int s = t-1;        // 先吃掉1颗
                if(s%i!=0) {        // 判断能否按人数平均分配
                    ok = false;     // 不能成功分配
                    break;
                }else{
                    t = s - s/i;    // 计算剩余葡萄数
                }
            }
            if(ok && t%i == 0){     // 剩余的最后平分
                return i;
            }
        }
        return -1;// 没有满足的情况
    }
    int main(){
        int n;
        scanf("%d",&n);
        int nums[n];
        for(int i=0;i<n;++i){
            //scanf("%d",&nums[i]);
            scanf("%d",nums+i);
        }
        for(int i=0;i<n;++i){
            int m = eatGraph(nums[i]);
            if(-1 != m){
                printf("%d\n",m);
            }else{
                printf("No Solution\n");
            }
        }
    
    }
    
  • 1888 可以编码 数组预存数据+字符串查找
#include 
    #include 
    #include 
    #include 
    
    int main() {
        int n;
        scanf("%d",&n);
        char d[n][10];
        for(int i=0;i<n;++i){
            scanf("%s",&d[i]);
        }
        int ok = 1;
        for(int i=0;i<n-1;++i){
            for(int j=i+1;j<n;++j)
                if(strlen(d[i]) < strlen(d[j])){
                    if(strstr(d[j],d[i]) == d[j]){
                        ok = 0;
                        break;
                    }
                }else{
                    if(strstr(d[i],d[j]) == d[i]){
                        ok = 0;
                        break;
                    }
                }
        }
        printf(ok?"Yes":"No");
        return 0;
    }

你可能感兴趣的:(2.1c语言大神进阶(基础篇))