图灵杯

题目描述:
Gold终于在自己秃顶之前找到了女朋友,但是无奈谈恋爱太花钱,Gold决定找份兼职挣钱。Gold打听到SSR(Small Soup River)School最近正在招补习班老师,他决定去应聘,SSR School的Boss出了一道多项式求导的题来考Gold,Gold因为最近天天忙着谈恋爱,什么都忘完了,但是他很需要这份工作,你能帮帮他吗?

输入:
一个整数T(1≤T≤100),表示测试数据的组数。 之后2*T行: 第一行一个正整数n(0≤n≤100),表示该多项式的最高次数。 第二行n+1个整数,分别表示xn到x0各项的系数。(-100≤xi≤100).

输出:
输出共有T行。 由高次到低次,输出每一项的系数。忽略前导零
样例输入
2
3
1 2 3 4
3
0 0 2 1
样例输出
3 4 3
2
坑比较多的一道题,当前面系数为0时,需要去掉前导0,当n = 0时,输出0,系数全为0时输出为空,还有末尾不要带空格

#include <stdio.h>
int main()
{
    int T;
    int l[101];
    scanf("%d",&T);
    while(T){
            int n,i,j,k,a,p;
        scanf("%d",&n);
        for(i=0;i<n+1;i++){
            scanf("%d",&l[i]);
        }
        if(n==0){
            printf("%d",0);
        }
        else{
        for(j=0;j<n;j++){       //求导
            l[j]=(n-j)*l[j];
        }
        for(k=0;k<n;k++){       //找到不为0的第一个数的索引;
            if(l[k]!=0){
                a=k;
                break;
            }
            if(l[k]==0 && k==n-1){   //若都为0,则a=k
                a=k;
            }
        }
        for(p=a;p<n;p++){           //最后一个数后面没空格
            printf("%d",l[p]);
            if(p<n-1){
                printf(" ");
            }
        }
        }
        printf("\n");
        T--;
    }
    return 0;
}

题目描述:
ELATIS去了一家名为GCD的超市,ELATIS需要购买n个物品,物品的售价为从1到n,编号也为1到n,这家超市的经营方式有点不太一样,ELATIS每次可以从这n个物品中选一样物品,需要支付的价格为还没被购买的所有物品的价格的最大公因数(包括即将购买的商品)。 假设ELATIS需要买4件物品,那么他可以按1,3,2,4的顺序购买。第一次购买1号物品,支付gcd(1,2,3,4)=1元,第二次购买3号物品,支付gcd(2,3,4)=1元,第三次购买2号物品,支付gcd(2,4)=2元,第四次购买4号产品支付gcd(4)=4元。则总共需要支付8元。(gcd(a,b)表示a和b的最大公因数) ELATIS想知道自己买下这n个物品所需要的最小花费,并且按价格从高到底顺序输出购买每件物品所支付的价格

输入:
一个正整数T,表示测试的组数(1≤T≤100) 一个正整数n (1≤n≤1000)

输出:
对于每一组: 输出共两行。 第一行一个正整数表示最小花费。 第二行个正整数表示购买每个物品的实际价格(降序)。
这题只需要知道相邻两个数的最大公因数是1,所以每件商品都可以一块钱买,一直输出1.
注意最后一个数后面没空格

#include <stdio.h>
int main()
{
    int t,n,i;
    scanf("%d",&t);
    while(t){
        scanf("%d",&n);
        printf("%d\n",n);
        for(i=0;i<n;i++){
            printf("%d",1);
            if(i<n-1){
                printf(" ");
            }
        }
        printf("\n");
        t--;
    }
    return 0;
}

题目描述:
痞老板经过孜孜不倦的研究和日以继日的跟踪,终于发现了蟹老板蟹黄堡的配方的秘密。蟹黄堡的调料有两种,它们的味道可以由两个字符串表示,如:“az"和"by”,意思是先将a调料和b调料混合,再将z调料和y调料混合,最终就得到了味道为"ay"的蟹黄堡。 严谨地说,就是从给定长度为n的字符串a和b构造一个新的长度为n的字符串s,使得对于所有的1≤i≤n,si=min{ai,bi},即从a、b两个字符串第i个位置中选取字典序靠前的字符作为字符串s第i位的字符,字典序的定义如下: 百度百科: 在数学中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法。 现在痞老板得到了其中一个调料字符串,但他并不知道另一个调料字符串是什么,他从海绵宝宝那里偷来了一个蟹黄堡,希望你能帮他找到另一个调料字符串的配方。如果发现无法得到另一个调味料字符串,说明痞老板把配方搞错了,请你输出一个整数 -1 来告诉他。因为痞老板比较穷,而调料的价格随着字典序的增加而增加,所以请你在所有的可能字符串中选择字典序最靠前的输出。

输入:
第一行输入一个整数T(1≤T≤100),表示数据的组数。 接下来T组输入,每组输入3行。 每组第一行一个整数n,表示三种字符串的共同长度。 每组第二行一个字符串a,表示蟹老板的第一种调料字符串。 每组第三行一个字符串s,表示成品蟹黄堡字符串。 题目保证a、b、s字符串都由小写英文字母组成,长度都为n ,(1≤n≤100000)

输出:
输出T组数据,每组一行一个字符串,表示蟹老板的第二种调料字符串,或者一个整数 -1 表示无法获知第二个调料字符串。
只要s中有比a中大的字符,则输出负一,若相等则b对应位置也相等,其实就是输出符合条件的s字符

#include <stdio.h>
int main()
{
    int t,n,i,j;
    char a[100000],s[100000];
    scanf("%d",&t);
    while(t){
        int x=0;
        scanf("%d",&n);
        scanf("%s",&a);
        scanf("%s",&s);
        for(i=0;i<n;i++){
            if(s[i]>a[i] && n>1){
                printf("%d",-1);
                x++;
                break;
            }
        }
        if(x>0){
                printf("\n");
                    t--;
            continue;
        }
        else{
            for(j=0;j<n;j++){
                    printf("%c",s[j]);
        }
        }
        printf("\n");
        t--;
    }
    return 0;
}

题目描述:
Antler是一个设计师,她很喜欢画圈圈。有一天,农场主邀请Antler去设计一块新的农场,因为Antler很喜欢画圈圈,所以她打算用圈圈来设计这个农场(保证任意两个圈圈(圆)有且仅有两个交点),农场主支付了Antler画n个圈的费用,农场主想知道这n个圈最多可以把农场分为多少部分(农场面积无限大)。 由于答案也许会非常大,计算机有可能存不下,所以我们要求答案对 1000000007 取模。

输入:
一个整数T,表示测试数据的组数。 T个整数 n(1≤n≤10000)。

输出:
每行一个整数,表示农场最多能被划分成多少部分

这个题设计到欧拉公式v−e+f=2 ,其中v是顶点数,e是棱数,f是面数.
n个圆,两两相交,则v=2∗C(n,2)=n(n−1)
其中C(n,2)是从n个元素中选两个元素的组合
e = n ( 2 ( n 1 ) ) = 2 n ( n 1 ) , n , n 1 2 ( n 1 ) 线 , , f = e v + 2 = 2 n ( n 1 ) n ( n 1 ) + 2 = n 2 n + 2 e=n(2(n-1))=2n(n-1),这个式子的含义是n个圆,每个圆都被其余n-1个圆分出2(n-1)条线段,由欧拉公式,f=e-v+2=2n(n-1) - n(n-1) + 2 = n^2 - n + 2

那上面这些知识搞清楚了,代码很简单

#include <stdio.h>
int main()
{
    int t,n,a;
    scanf("%d",&t);
    while(t){
        scanf("%d",&n);
        if(n==1){
            printf("%d\n",2);
        }
        else{
                a=n*n-n+2;
            printf("%d\n",a);
        }
        t--;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43763889/article/details/84761000