51nod--1770数数字
来源:互联网 发布:linux程序设计pdf下载 编辑:程序博客网 时间:2024/05/01 19:32
为该问题添加一个话题 隐藏话题
1770 数数字
基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题
收藏
关注
统计一下
样例解释:
3333333333*3=9999999999,里面有10个9。
Input
多组测试数据。第一行有一个整数T,表示测试数据的数目。(1≤T≤5000)接下来有T行,每一行表示一组测试数据,有4个整数a,b,d,n。 (1≤a,b≤9,0≤d≤9,1≤n≤10^9)
Output
对于每一组数据,输出一个整数占一行,表示答案。
Input示例
23 3 9 103 3 0 10
Output示例
100
刚开始范围看错了,用了大数,显然超时了,就当是复习了一遍大数乘法
第二次想到除了首位和末位,中间应该都一样,然而并不是这样,如8888*6=53328 但是中间一定存在循环节
记录每个数出现次数,当出现重复数字时,该数字个数就是加上剩余长度,注意第一个数可能和重复的数字不同
超时代码:
//超时代码:#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int num[100],s[100];int main(){int t;scanf("%d",&t);while(t--){int a,b,d,n;int sum=0;scanf("%d%d%d%d",&a,&b,&d,&n); memset(num,0,sizeof(num)); memset(s,0,sizeof(s)); for(int i=0;i<n;i++){ num[i]=a*b+s[i]; if(num[i]>9){ s[i+1]=num[i]/10; num[i]=num[i]%10;}if(num[i]==d)++sum;}num[n]=s[n];if(num[n]!=0&&num[n]==d)sum+=1;printf("%d\n",sum);}return 0;}//正确代码: #include<cstdio>#include<cstring>int num[10];int main(){int t,c,g,j;scanf("%d",&t);while(t--){int a,b,d,n,tt=0;scanf("%d%d%d%d",&a,&b,&d,&n);int nu=a*b;if(nu<10) {if(d==nu)printf("%d\n",n);else printf("%d\n",tt);}else {memset(num,0,sizeof(num));c=nu%10;//当前数字 g=nu/10;//进位数n--; num[c]++;while(n){c=(nu+g)%10;g=(nu+g)/10;if(num[c]!=0){num[c]+=n;break; }else num[c]++;n--;} num[g]+=1;//第一位数即进位数 printf("%d\n",num[d]);}}return 0;}
0 0
- 数数字(51nod 1770)
- 51nod 1770 数数字
- 51nod-【1770 数数字】
- 51nod--1770数数字
- 1770 数数字 51NOD
- 【51Nod】1770 数数字
- 51nod 1770 数数字
- 51nod--1770数数字
- 51nod 1770 数数字
- 51nod 1770 数数字
- nod-1770-数数字
- 51 nod 数数字
- 51 nod 数数字
- 51Nod-1770-数数字
- 51nod 1770 数数字【模拟+思维】
- 51NOD 1770 数数字 循环节
- 51nod 1770 数数字(规律)
- 51 nod 1770 数数字 乘法模拟
- java rmi 初探
- LeetCode 21 Merge Two Sorted Lists
- 灾后重建_洛谷1119_最短路
- 存储器这个小话题(3)
- ubuntu 16.04安装搜狗输入法
- 51nod--1770数数字
- LeetCode 22 Generate Parentheses
- 新的开始
- FP-growth算法高效实现
- 2016年总结
- 抽象方法、接口、继承、多态、图形计算器
- 微信小程序_文笔记+(第一章)
- GC
- PDO(php data object)+事务