思路如下
这题首先是要多组输入,然后要把每组数据输入到一个char数组里,之后用桶排的方法去统计各字符出现的次数,最后定义一个最大值去存储 字符与ASCALL码的乘积的最大值,然后输出。
题解如下
#include<stdio.h> #include<string.h> int main() { char ar[999]; while (scanf("%s",ar)!=EOF) { int br[123]={0}; //br要放到while循环里面,每次驯化都初始化 int LEN_ar=(int)strlen(ar); for(int i=0;i<LEN_ar;i++) { br[ar[i]]++; } int max=-1; for(int i=0;i<123;i++) { if(max<br[i]*i) { max=br[i]*i; } } printf("%d\n",max); } return 0; }思路如下
这题就是要自己定义结构体去存多种储数据类型,让后用sort函数去排序,sort(),函数的第三参数(比较函数)需要自己来编写,最后输出就行了
题解如下
#include<stdio.h> #include<iostream> #include<algorithm> struct Man { char name[10]; int year; int month; int day; }; bool cmp_sort(Man a,Man b) // 注意:这里要弄懂比较好数要怎么编写,要注意一点,只有当这个函数的返回值为 假(false)当时候这时候才发生交换!!! { if(a.year>b.year) { return false; } else if(a.year==b.year&&a.month>b.month) { return false; } else if(a.year==b.year&&a.month==b.month&&a.day>b.day) { return false; } else return true; } using namespace std; int main() { int n; scanf("%d",&n); Man man[n]; for(int i=0;i<n;i++) { scanf("%s",man[i].name); scanf("%d%d%d",&man[i].year,&man[i].month,&man[i].day); } sort(man,man+n,cmp_sort); for(int i=0;i<n;i++) { printf("%s\n",man[i].name); } return 0; }Description
小仙女最近吃胖了不少,她很郁闷,很怕被人说胖,但是如果班上有女生比她更胖,她就会充满动力啦~ 众所周知,xxn现在体重120,班上有n个人,如果有女生的体重比她重,她就会很开心,否则她将超级难过!!!! Input 多组输入没次输入一个整数n,代表n行。 之后n行每行一个数字a和一个字符串s分别代表体重和性别;(0<=a<=1000) Output 如果xxn开心的话输出 "哈哈哈",否则输出 " 嘤嘤嘤"; Sample Input 1 2 120 woman 130 woman Sample Output 1 hhh思路如下
对每组数据进行判断看是否有符合题意的输出
解题如下
#include<stdio.h> struct Student { char gender[5]; int weight; }; int main() { int n; while(scanf("%d",&n)!=EOF) { Student mate[n]; for(int i=0;i<n;i++) { scanf("%d%s",&mate[i].weight,mate[i].gender); } int flag=0; //先假设所有女生体重小于120 for(int i=0;i<n;i++) { if(mate[i].gender[0]=='w'&&mate[i].weight>120) { flag=1; //满足题意大于120,设为真值 } } if(flag==1) { printf("hhh\n"); } else { printf("yyy\n"); } } return 0; }Description
pxj爱喝可乐,最近可乐公司出了一个活动:四个空可乐瓶可兑换一瓶可乐,pxj当然不会错过这次机会,她买了p瓶可乐,最多可以喝几瓶呢? Input 多组输入 每一行输入一个pxj买的可乐的数量p ( 0<=p<=10000) 当p=0时结束输入 Output 输出pxj最多可以喝的可乐数量a Sample Input 1 5 10 0 Sample Output 1 6 13思路如下
这是一道 模拟题,我们只需要模拟题目所描述的过程就行了
解题如下
#include<stdio.h> int main() { int n; scanf("%d",&n); while (n!=0) { int sum=n; //总共可以喝的瓶数 int sur_bottle=n; //喝完剩余的瓶树 for(int i=0; ;i++) { if(sur_bottle>=4) { sum+=sur_bottle/4; sur_bottle=sur_bottle/4+sur_bottle%4; } else { break; } } printf("%d\n",sum); scanf("%d",&n); } return 0; }Description
“人类用十进制,上帝用二进制” ZCR和ZHY是510的两大肥宅,每天中午点外卖是他们最快乐的事情,可算账的时候ZCR很头疼,因为ZCR只会二进制而ZHY只会十六进制,并且ZHY总是仗着ZCR没法换算二人的账单而不给钱。忍一时越想越气,退一步越想越亏,于是ZCR想请你帮忙换算二人的账单。ZCR给你一个十六进制数字,代表ZHY的账单,请你把它换算成ZCR认识的二进制。 Input 第一行输入T,代表下面有T组数据。 每组数据第一行输入一个n,代表有一个16进制数,不带0x(例如给出一个十进制的0,在十六进制里它表示为00,此处就是说它在十六进制里仍然表示为0,而不是00,详细的可以看c语言附录A),A~F均为大写。 (1 ≤ T, n, m ≤ 1e9) Output 每行输出保留前导零的n的2进制。(保留前导0的规则为:n不是4的倍数的话,要把n补0补成4的倍数。 例如:1,保留前导零之后为0001 11110,保留前导0之后为00011110) Sample Input 1 2 A 0 Sample Output 1 1010 0000 Hint 十六进制在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字。 例如十进制数10,在二进制写作1010,在16进制写作A。(可以看一下C语言课本的附录A哦);思路如下
这题是让 十六进制转化为二进制,根据提示我们知道 在二进制下的 4位对应十六进制下的1位,那我们就可以反过来想(反过来转换)1位对应二进制下的4位,根据十六进制下的某一是什么,进行输出就行了
题解如下
#include<stdio.h> #include<string.h> int main() { int T; scanf("%d",&T); while (T--) { char ar[9999]; scanf("%s",ar); int LEN_ar=(int)strlen(ar); for(int i=0;i<LEN_ar;i++) { switch (ar[i]) { case '0':printf("0000");break; case '1':printf("0001");break; case '2':printf("0010");break; case '3':printf("0011");break; case '4':printf("0100");break; case '5':printf("0101");break; case '6':printf("0110");break; case '7':printf("0111");break; case '8':printf("1000");break; case '9':printf("1001");break; case 'A':printf("1010");break; case 'B':printf("1011");break; case 'C':printf("1100");break; case 'D':printf("1101");break; case 'E':printf("1110");break; case 'F':printf("1111");break; default: break; } } printf("\n"); } return 0; }Description
YZJ学长要寻找最大值,但是他不会,所以要询问学弟学妹们该怎么办? 这个问题是这样的:请在正整数n中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 Input 有多组测试数据 每组测试数据包含两个正整数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,并且m小于n的位数) Output 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数 Sample Input 1 92081346718538 10 1008908 5 Sample Output 1 9888 98思路如下
如果要想求去掉一些数字后,按原序组成的最大值,就要明白,要先让第一位最大,其次是第二位,然后依次往下, 解题如下
#include<stdio.h> #include<string.h> int main() { char ar[9999]; int n; while(scanf("%s%d",ar,&n)!=EOF) { int LEN_ar=(int)strlen(ar); int br[9999]; for(int i=0;i<LEN_ar;i++) { br[i]=ar[i]-'0'; } int *p_1,*p_2; //p_1指向待筛选区域起始位置,p_2待筛选区域终点位置 p_1=&br[0]; p_2=&br[LEN_ar-(LEN_ar-n)]; int *temp_p; //做中间变量 for(int i=0;i<LEN_ar-n;i++) //删除数字后有几位,就循环几次,已确定每一位的最大值 { int max=-1; //某位 所能去到的最大值 for(int *j=p_1;j<=p_2;j++) //循环遍历 { if(max<*j) { max=*j; temp_p=j; } } printf("%d",max); //更新筛选区域 p_1=temp_p+1; p_2++; } printf("\n"); } return 0; }Description
yzj是一个贪吃鬼,而且他还特别喜欢吃一整块的东西(什么叫一整块的东西?就是这个东西是矩形而且是实心的,中间不能有其他东西,吃的东西用‘*’来表示)。yzj不知道从哪里得到了几块吃的东西,但是这个高为 n n的东西有一部分不能吃(被污染了!!!用‘.’来表示)。然而yzj是一个吃货,你宁愿失去一些重要的东西去找巫婆交换来使这个高为n的东西给搞得可以吃!巫婆可以把‘.’号变成‘*’号,以此来使这个残缺的东西有一整块可以吃。但是巫婆为了减少负担肯定会减少把‘.’变成‘*’的次数。 聪明的你可以输出巫婆最少要把那些位置变成‘*’号嘛! Input 多组输入,先输入一个 n n,再输入 n n行。表示一个图 ( 1 ≤ n ≤ 100 1≤n≤100) Output 输出符合题意的 n n行的图形,哪些位置巫婆要把它变成‘*’,你就输出‘*’号,否则输出‘.’,图形后面有一个空行 Sample Input 1 3 ..**.. .*..*. ...... Sample Output 1 .*..*. ..**.. ...... Sample Input 2 5 *....... ....*... ........ ........ ..*..... Sample Output 2 .****... ****.... *****... *****... **.**... Hint 输入和输出图形叠加之后刚好有一个被‘*’号覆盖的矩形方块思路如下
这一题要明白,这一题的本质就是要找一个最小矩形(这样可以让巫婆施最少的法),如何确定这个矩形呢,只需要确定对角线上的两个点(max_x,max_y)、(min_x,min_y),这两个点的横竖坐标都是 极值,我们只需要定义变量获取这些,极值就行了,有了极值就能确定矩形区域,在矩形区域内我们只需 把 . 号变为 *,*号变为 . 号即可,在矩形区域以外的区域全打印 . 号就行了
解题如下
#include<stdio.h> #include<string.h> int main() { int n; while(scanf("%d",&n)!=EOF) { char ar[n][200]; for(int i=0;i<n;i++) { scanf("%s",ar[i]); } int LEN_w=strlen(ar[0]); int max_x=-1,max_y=-1,min_x=9999,min_y=9999; for(int i=0;i<n;i++) //遍历数组,去求横竖坐标极值 { for(int j=0;j<LEN_w;j++) { if(ar[i][j]=='*') { if(max_x<i) { max_x=i; } if(max_y<j) { max_y=j; } if(min_x>i) { min_x=i; } if(min_y>j) { min_y=j; } } } } for(int i=0;i<n;i++) { for(int j=0;j<LEN_w;j++) { if(i>=min_x&&i<=max_x&&j>=min_y&&j<=max_y) //在矩形区域内 { if(ar[i][j]=='*') printf("."); else printf("*"); } else //在矩形区域外 printf("."); } printf("\n"); } printf("\n"); } return 0; }Description
最近开始申请单项奖学金,没去圈钱杯(蓝桥杯)国赛的nuoyanli很伤心(¥_¥),nuoyanli决定在下一届圈钱杯(蓝桥杯)之前进行训练(虚假)。 在训练的第一天,他应该完全解决一个问题,第二天应该解决两个问题,第三天则完全解决三个问题,依此类推:在第k天,他应该解决k个问题。 nuoyanli有n个比赛的列表,第i个比赛包括ai ```c 问题。在每一天中,nuoyanli都必须选择自己尚未解决的竞赛中的一种并加以解决。 他从这场比赛中准确地解决了 k k个问题(其他问题也从中丢弃)。 如果在第k 天没有至少由nuoyanli尚未解决的 k个问题组成的比赛,则nuoyanli停止训练。 假设nuoyanli一定会最佳选择比赛,请问他最多可以训练多少天? Input 输入的第一行包含一个整数 n(1≤n≤2⋅10^5)n1≤n≤2⋅10^5表示比赛数。 输入的第二行包含 n n个整数a1,a2,…,an(1≤ai≤2⋅105)a 1 ,a 2 ,…,a n (1≤a i ≤2⋅105)第i场比赛中的问题数。 Output 打印一个整数,假设nuoyanli会最佳选择比赛,nuoyanli可以训练的最大天数。 Sample Input 1 3 1 1 1 Sample Output 1 1 Sample Input 2 4 3 1 4 1 Sample Output 2 3思路如下
这题就是排序完数组,进行一天天的比较。看最多有多少天符合题意
Description
现在有两个整数x,y,保证x>y,(1<x,y<1e9)你可以选择任意一个素数p,并且可以从x中减去任意个p,你可以将x变成y吗? Input T组输入 每组输入包括两个整数x,y Output 如果可以输出YES 否则输出NO Sample Input 1 4 100 98 42 32 10000000 1 41 40 Sample Output 1 YES YES YES NO Hint 素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数 ```c *** **思路如下** >真是一道智障题,需要理解要能否把x减去n个相同的素数(可以自己任意选)变成y,这要去定x-y!=1就符合题意!!!!! **题解如下** ```c #include<stdio.h> int main() { int T; scanf("%d",&T); while (T--) { int a,b; scanf("%d%d",&a,&b); int cha=a-b; if(cha==1) { printf("NO\n"); } else { /* if(cha%2==0||(cha-1)%2==0) { printf("YES\n"); } else { printf("NO\n"); } */ printf("YES\n"); } } return 0; }