zoukankan      html  css  js  c++  java
  • 杭电oj平台上11页的题目代码:hdu-page11 (2089~2099)2093

    //2089
    /*思路:不吉利的数字为所有含有4或62(连号)的号码。
    例如:62315 73418 88914
    都属于不吉利号码.
    */
    #include<stdio.h>
    #include<string.h>
    #define N 10
    int dp[N][N];//dp[i][t],i代表位数,t代表首位为t
    int main()
    {
    for (int i = 0; i <= 9; i++)
    {
    dp[1][i] = 1;
    }
    for (int i = 2; i <= 7; i++)
    {
    for (int t = 0; t <= 9; t++)
    {
    for (int k = 0; k <= 9; k++)
    {
    if (t == 4 || k == 4)
    {
    continue;
    }
    if (t!=6||k!=2)
    {
    dp[i][t] += dp[i - 1][k];
    }
    }
    }
    }
    int l, r;
    while (~scanf("%d%d",&l,&r))
    {
    if (l==0&&r==0)
    {
    break;
    }
    int d1[10];
    int d2[10];
    memset(d1, 0, sizeof(d1));
    memset(d2, 0, sizeof(d2));
    int len1 = 1;
    int len2 = 1;
    while (l>0)
    {
    d1[len1] = l % 10;
    l /= 10;
    len1++;
    }
    while (r>0)
    {
    d2[len2] = r % 10;
    r /= 10;
    len2++;
    }
    int sum1 = 0;
    int sum2 = 0;
    for (int i = len1-1 ; i >= 1; i--)
    {
    for (int t = 0; t < d1[i]; t++)
    {
    if ((t==2&&d1[i+1]==6)||t==4)
    {
    continue;
    }
    sum1 += dp[i][t];
    }
    if (d1[i]==4||(d1[i+1]*10+d1[i])==62)
    {
    break;
    }
    }
    for (int i = len2-1; i >= 0; i--)
    {
    for (int t = 0; t < d2[i]; t++)
    {
    if ((t == 2&&d2[i+1]==6)||t==4)
    {
    continue;
    }
    sum1 += dp[i][t];
    }
    if (i == 1 && d2[i] != 4 && (d2[i + 1] * 10 + d2[i]) != 62)
    sum2++;
    if (d2[i] == 4 || (d2[i + 1] * 10 + d2[i]) == 62)
    break;
    }
    printf("%d ", sum2 - sum1);
    }
    return 0;
    }

    //2090
    //思想:菜价=数量乘上单价,然后相加
    #include<stdio.h>
    #include<string.h>
    #define N 100
    int main()
    {
    char str[N];
    double amount;
    double price;
    double sum = 0;
    while (scanf("%s%lf%lf",str,&amount,&price)!=EOF)
    {
    sum += amount*price;
    }
    printf("%.1lf ", sum);
    return 0;
    }

    //2091
    /*思路:主要是找规律,
    主要思路就是找出行数和A所在未知的规律,比如不是首尾行的,根据行号确定字母的位置,比如是在非首尾行的第i行,该行有n-i个空格,那么该行的第一个字母就是在第n-i+1的位置上,中间再输出2*i-1个空格(空格就是在两个字母之间,),接着再输出字母,
    接着换行到下一行,直到最后一行 ,最后一行是2*n-1
    比如测试案例是7和A,第一行是先输出6个空格,再根据i的大小输出‘A’或者空格;
    第二行是先输出5个空格,再根据再输出‘A’,
    */
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    char c;
    int i, j, k;
    int n;
    int flag = 1;
    //整数n表示等腰三角形的高,也就是输出图形的行数
    while (~scanf("%c%d", &c, &n))
    {
    getchar();
    if (c != '@')
    {
    if (flag != 1)
    {
    printf(" ");

    }
    flag++;//用来计数是第几行
    //第一行,先输出n-1个空格
    for (i = 1; i <= n - 1; i++)
    {
    //printf(" ");
    for ( j = n-i-1; j >= 0; j--)
    {
    printf(" ");
    }
    //假如是第二行,两个字母的位置分别是1和3,此时i是2
    for ( k = 1; k <= 2 * i - 1 ; k++)
    {
    if (k == 1 || k == 2 * i - 1)
    {
    printf("%c", c);
    }
    else
    {
    printf(" ");
    }
    }
    printf(" ");
    }
    //最后一行,共有2*n-1个
    for (i = 1; i <= 2 * n - 1; i++)
    {
    printf("%c", c);
    }
    printf(" ");
    }
    else
    {
    break;
    }
    }
    return 0;
    }

    //2092
    #include<stdio.h>
    int main()
    {

    int n, m;//n是和,m是乘积
    int i;
    while (~scanf("%d%d",&n,&m))
    {
    if (n==0&&m==0)
    {
    break;
    }
    for (i = -9999; i < 10000; i++)
    {
    int k = n - i;
    if (k*i==m)
    {
    printf("Yes ");
    break;
    }
    }
    if (i>=10000)
    {
    printf("No ");

    }
    }
    return 0;
    }

    //2093
    /*思路:每个人做的题都在对应的题号下有个数量标记,负数表示该学生在该题上有过的错误提交次数,
    但到现在还没有AC,正数表示AC所耗的时间,如果整数a跟上一对括号,里面有个整数b,那就表示该学生提交该题AC了,
    耗去了时间a,同时曾经错误提交了b次
    */

    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"
    int cmp(const void *a,const void *b);
    typedef struct people{
    char name[15];
    int time;
    int num;
    }people;
    people peo1[1010];
    int main(){
    int n,m,num,time,num1,i,a,b;
    char name[15];
    num1=0;
    scanf("%d%d",&n,&m);
    while(~scanf("%s",&name)){
    num=time=0;
    for(i=0;i<n;i++){
    if(scanf("%d(%d)",&a,&b)==2){
    num++;
    time+=(a+b*m);
    }
    else{
    if(a>0){
    num++;
    time+=a;
    }
    }

    }
    strcpy(peo1[num1].name,name);
    peo1[num1].time=time;
    peo1[num1].num=num;
    num1++;
    }
    qsort(peo1,num1,sizeof(people),cmp);
    for(i=0;i<num1;i++){
    printf("%-10s %2d %4d ",peo1[i].name,peo1[i].num,peo1[i].time);
    }
    return 0;
    }
    int cmp(const void *a,const void *b){
    people *p = (people*)a,*q=(people *)b;
    if(p->num!=q->num) return q->num-p->num;
    if(p->time!=q->time) return p->time-q->time;
    return strcmp(p->name,q->name);
    }

    //2094

    //思路:所有人减去失败者的人数如果等于一则说明有成功者。
    #include<iostream>
    #include<set>
    #include<string>
    using namespace std;

    int main()
    {
    set<string> all;
    set<string> lose;
    int T;
    while (cin>>T&&T)
    {
    string a, b;
    while (T--)
    {
    cin >> a >> b;
    all.insert(a);
    all.insert(b);
    lose.insert(b);
    }
    if (all.size()-lose.size()==1)
    {
    cout << "Yes" << endl;
    }
    else
    {
    cout << "No" << endl;
    }
    all.clear();
    lose.clear();
    }
    return 0;
    }


    //2095
    //思路:出现次数为奇数的数字;一直异或,留下的是奇数的数
    #include<iostream>
    using namespace std;
    int main()
    {
    int T, res, n;
    while (~scanf("%d",&T))
    {
    if (T == 0)
    break;
    res = 0;
    for (int i = 0; i < T; i++)
    {
    scanf("%d", &n);
    res ^= n;
    }
    printf("%d ",res);
    }
    return 0;
    }


    //2096
    //思路:不管是几位数,就是将末尾两位数进行相加,相加后的结果也是保留计算结果的两位数
    #include<stdio.h>
    int main()
    {
    int T;
    int a, b;
    int sum;
    scanf("%d", &T);
    while (T--)
    {
    sum = 0;
    scanf("%d%d", &a, &b);
    a %= 100;
    b %= 100;
    sum = (a + b) % 100;
    printf("%d ", sum);
    }

    return 0;
    }


    //2097
    //思路:四位数转换为四位数字,返回四位数字的和,即是进制转换问题
    #include<stdio.h>
    //进制转换
    int fun(int n, int mod)
    {
    int sum = 0;
    while (n)
    {
    sum += n % mod;
    n /= mod;
    }
    return sum;

    }
    int main()
    {
    int n;
    int sum = 0;
    while (~scanf("%d",&n))
    {

    if (n==0)
    {
    break;
    }
    sum = fun(n, 10);//注意这里别漏掉,22是十进制的各位数相加得到
    if ((fun(n, 10) == sum)&&(fun(n, 12) == sum)&&(fun(n, 16) == sum))
    {
    printf("%d is a Sky Number. ", n);
    }
    else
    {
    printf("%d is not a Sky Number. ", n);
    }
    }
    return 0;
    }

    //2098
    /*思路:将一个偶数拆成两个不同的素数的和,问有几种拆法;
    看1-n有几个素数将其记录在数组中,抽取数组中的两个素数,看其是否等于n,如果等于n,则count++*/
    #include<stdio.h>
    #include<math.h>
    #define N 10000
    int prime[N];//用来记录1-n中的素数
    int isPrime(int n)
    {
    int i;
    for (i = 2; i <= sqrt(double(n)); i++)
    {
    if (n%i==0)
    {
    break;
    }
    }
    //一直都没有break,说明一直都没有因数
    if (i>sqrt(double(n)))
    {
    return 1;
    }
    return 0;
    }

    int main()
    {
    int n;
    int count;
    int len = 0;
    int flag;
    for (int i = 2; i <= 10000; i++)
    {
    //如果i是素数,则将其放到素数数组中
    if (isPrime(i))
    {
    prime[len++] = i;
    }
    }
    while (~scanf("%d",&n))
    {
    count = 0;
    if (n==0)
    {
    break;
    }
    flag = 0;//用来标记遍历当前素数的值和 n的大小,如果比n-1都要大的话,则不用继续遍历了
    //遍历数值大小在2-10000中的素数数组,如果其中两个素数相加等于n,则count++
    for (int i = 0; i < len; i++)
    {
    if (prime[i] < n-1)
    {
    for (int j = i + 1; j < len; j++)
    {
    if (prime[j] < n - 1)
    {
    if (prime[i] + prime[j] == n)
    {
    count++;
    }
    }
    }
    }
    //如果prime[i]都已经大于等于n-1了,则prime[j]肯定大于等于n-1了,就直接break就好了,后面不会有符合条件的素数对了
    else
    {
    break;
    }
    }
    printf("%d ", count);
    }
    return 0;
    }

    //2099
    #include<stdio.h>
    int main()
    {
    int a, b;
    while (~scanf("%d%d",&a,&b))
    {
    if (a == 0 && b == 0)
    {
    break;
    }
    int count = 0;//用来看是否是第一个数,便于控制空格
    a *= 100;
    for (int i = 0; i < 100; i++)
    {
    if ((a+i)%b==0)
    {
    count++;
    if (count>1)
    {
    printf(" ");
    }
    printf("%02d", i);
    }
    }
    printf(" ");
    }
    return 0;
    }

    一生有所追!
  • 相关阅读:
    读后感之—寒门学子重要选择-程序员
    架构中的分而治之
    如何从码农进化到项目管理者
    饿了么架构
    简单理解支付宝和蚂蚁花呗的架构
    架构小谈之美团外卖
    漫谈架构总结之1500
    平台基本信息项目目标文档
    第六学期每周总结-第三周
    质量管理之可用性战术分析
  • 原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8620649.html
Copyright © 2011-2022 走看看