NYIST-2017大一新生第二次周赛题解
来源:互联网 发布:java书籍推荐 豆瓣 编辑:程序博客网 时间:2024/06/08 12:22
题目链接 https://vjudge.net/contest/193071
A - 字符串统计
for循环遍历 找到数字个数
#include<stdio.h>#include<string.h>char str[10000000];int main(){ int t; scanf("%d",&t); while(t--) { scanf("%s",str); int len=strlen(str); int sum=0; for(int i=0;i<len;i++) { if(str[i]>='0'&&str[i]<='9') sum++; } printf("%d\n",sum); } return 0;}B - 亲和数
#include<stdio.h>#include<string.h>#include<math.h>int main(){ int t; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); int sum1=0,sum2=0; for(int i=1;i<=sqrt(n*1.0);i++) { if(n%i==0) sum1+=i+n/i; } sum1-=n; for(int i=1;i<=sqrt(m*1.0);i++) { if(m%i==0) sum2+=i+m/i; } sum2-=m; if(sum1==m&&sum2==n) printf("YES\n"); else printf("NO\n"); } return 0;}
C - How many days?
#include<stdio.h>#include<string.h>#include<math.h>int main(){ int n,m; while(~scanf("%d%d",&n,&m),(n||m)) { int sum=0;//总共过的天数 while(n) { sum+=n/m*m;//先加上最多能过的k天的倍数 n=n%m+n/m;//剩下的不够k天的钱再加上获赠的钱 if(n<m)//如果现在有的钱不够k,输出 如果够k 继续循环直至不够k { sum+=n; break; } } printf("%d\n",sum); } return 0;}
D - Rightmost Digit
快速幂水题 每次 %10
#include<stdio.h>typedef long long LL;int kuai(LL n,LL k){ LL sum=1,p=n; while(k) { if(k&1) sum=(p*sum)%10; p=((LL)p*p)%10; k>>=1; } return (int)sum;}int main(){ int t; scanf("%d",&t); while(t--) { LL n; scanf("%lld",&n); printf("%d\n",kuai(n,n)); } return 0;}E - 权势二进制
因为每一位都可以选择加1或者加0 所以只要得到各个位上数字的最大值就好
#include<stdio.h>int main(){ int n,ma=0; scanf("%d",&n); while(n) { int t=n%10; if(t>ma) ma=t; n=n/10; } printf("%d\n",ma);}
F - 排序
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char a[1009];int b[10000];int main(){ while(~scanf("%s",a)) { int len=0; for(int i=0;i<strlen(a);i++) { if(a[i]!='5')//如果不是‘5’ { int sum=0; for(;a[i]!='5'&&i<strlen(a);i++) //碰到‘5’或者到字符串末尾则停止 sum=sum*10+a[i]-'0'; //得到那一串的数值 b[len++]=sum; //存入 } } sort(b,b+len); for(int i=0;i<len-1;i++) printf("%d ",b[i]); printf("%d\n",b[len-1]); } return 0;}
G - 18岁生日
#include<stdio.h>bool pan(int x)//判断是否为闰年{ if((x%4==0&&x%100)||x%400==0) return 1; return 0;}int main(){ int t; scanf("%d",&t); while(t--) { int y,m,d; scanf("%d-%d-%d",&y,&m,&d); if(m==2&&d==29) { printf("-1\n"); } else { int k=0,sum=0; for(int i=y+1;i<y+18;i++) //找出从出生后一年到17岁那年有几年为闰年 { if(pan(i)) k++; } if(pan(y)) //如果出生那年是闰年且月份在2月前闰年数+1 { if(m<=2) k++; } if(pan(y+18))//如果18岁那年为闰年且月份在2月后闰年数+1 { if(m>2) k++; } printf("%d\n",k*366+(18-k)*365); } }}H - 阿牛的EOF牛肉串
O后面只能接 E或F E后面是 O E F F后面是 O E F
假设结尾是O的串数为 a 结尾是E或F的串数为 b
因为 只有结尾是E或 F后面才能添 O
结尾为O或E或F 后面都能添 E 或F
所以 如果再增加1个字符则 a=b b=2*(a+b)
而最开始只有1个字符的时候 a=1 ,b=2 然后开始递推 最后输出 a+b
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){ long long n; while(~scanf("%lld",&n)) { long long a=2,b=1; for(long long i=2;i<=n;i++) { long long p=a,pp=b; b=p; a=pp*2+p*2; } printf("%lld\n",a+b); } return 0;}
I - 密码
#include<stdio.h>#include<string.h>#include<math.h>char str[100];int main(){ int t; scanf("%d",&t); while(t--) { scanf("%s",str); int len=strlen(str); int a1=0,a2=0,a3=0,a4=0; for(int i=0; i<len; i++) { if(str[i]>='0'&&str[i]<='9') a3=1; if(str[i]>='a'&&str[i]<='z') a2=1; if(str[i]>='A'&&str[i]<='Z') a1=1; if(str[i]=='~'||str[i]=='!'||str[i]=='@'||str[i]=='#'||str[i]=='$'||str[i]=='%'||str[i]=='^') a4=1; } if(len<=16&&len>=8&&a1+a2+a3+a4>=3) //只要满足3个条件 printf("YES\n"); else printf("NO\n"); } return 0;}
J - 求数列的和
#include<stdio.h>#include<math.h>int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { double sum=(double)n,sun=(double)n; for(int i=2;i<=m;i++) { sum+=sqrt(sun); sun=sqrt(sun); } printf("%.2lf\n",sum); } return 0;}
K - 整除的尾数
枚举后两位从 0到99 看(尾数加100*a )%b 是否为0
#include<stdio.h>int main(){ int a,b; while(~scanf("%d%d",&a,&b)&&a+b) { int t=a*100; int o=0; for(int i=0;i<100;i++) { if((t+i)%b==0) { if(o==0) { printf("%02d",i); o++; } else printf(" %02d",i); } } printf("\n"); }}
阅读全文
0 0
- NYIST-2017大一新生第二次周赛题解
- NYIST--2017大一新生第一次周赛题解
- NYIST--2017大一新生第四次周赛题解
- nyist-2017软件计科联合新生赛题解
- 解题报告-NYIST大一新生赛(10.16)
- 2017网络新生赛题解
- nyist-ACM17新生国庆集训Round#1题解
- nyist-ACM17新生国庆集训Round#2题解
- nyist——ACM新生牛刀小试 Round#1题解
- HYNU 第二次周赛题解
- 大一新生
- BNUOJ新生赛题解
- GPNU2017新生赛题解
- SCAU2011新生现场赛题解
- 本次新生赛部分题解
- 北师大新生赛2014 题解
- 南邮新生赛题解
- HDU 11.29 新生赛题解
- 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
- 手慢无 | 年薪30万也离职学的Linux运维课?到底教什么?
- 怎样成为知乎大V?爬取张佳玮138w+知乎关注者:数据可视化
- 一图看尽Linux发行版:最全Linux发行版进化编年史
- String类总结之内存分析
- NYIST-2017大一新生第二次周赛题解
- TCP协议中的序列号
- ThreadLocal学习
- 倍增源代码
- 单例模式
- Binary Search:240. Search a 2D Matrix II
- 什么是dubbo
- apt-get指令的autoclean,clean,autoremove的区别
- Callable和Future