- 主页/
- 美团 %7 事后代码C++
美团 %7 事后代码C++
发布于 2017-09-14 23:06
2222 次浏览
0 赞
来自 试题交流
大佬帮忙看一下, 当时有BUG,事后完善的程序。
举例说明:
127 1996 12
模7结果a[i]依此为
1 1 5
数字长度b[i]依次为
3 4 2
数组c[i][j] 存放 (i * pow(10,j)) % 7 的值,供查询。
127 以 127作为低部分 ,1996 作为高部分,
a[0] + c[b[1]a[0]] = 1 + 6 = 7 ,所以1996127 满足条件,以此类推
12127 : 2 + 3 != 7;
1271996 : 1 + 5 != 7
121996 : 1 + 6 = 7
12712 : 5 + 2 = 7
199612 : 5 + 2 = 7
结果为 4
#include<cstdlib> #include<cstdio> #define N 10001 #define M 10 int a[N]; // 每个数 % 7的余数 int b[N]; // 每个数的位数 100 => 3 long long T[10] ={0,10,100, 1000, 10000, 100000, 1000000, 10000000,100000000,1000000000}; long long c[M][M]; // c[i][j] =( i * pow(10,j) ) % 7 int main(){ int n = 0; scanf("%d", &n); for(int i = 0; i < n; i++){ int tmp = 0; scanf("%d", &tmp); a[i] = tmp % 7; //获取余数 int count = 0; while(tmp > 10 ){ tmp /= 10; count++; } count++; b[i] =count; // 获取数字位数 } for(int i=0; i < 10; i++){ for(int j = 0; j < 10; j++){ c[i][j] = (i * T[j] ) % 7; } } int count = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ if(i == j) continue; if(a[i] + c[a[j]][b[i]] == 7) count++; } } printf("%d\n", count); return 0; }
2 条回复
添加回复