武汉科技大学ACM:1010: 电话号码

Problem Description

LXD打算换个手机号码,但是他去营业厅选号码的时候却把移动的客服小姐烦得不行,因为他太挑三捡四啦。对于一个手机号的后六位数字(前面五位他就无所谓了),LXD有很严格的要求,具体如下:

(1)一定要有数字x。

(2)不能有数字k。

(3)这个六位数的大小在区间[l,r]内。

(4)最少要有两个相邻的数字相同。

现在你要计算出这后六位数字有多少组是符合LXD要求的。

Input

第一行是一个正整数T,表示总共有T组数据。

接下来有T行(T组数据),每行有四个正整数x,k,l,r。0<=l<=r<=999999,0<=x,k<=9。

Output

每行输出一个整数,对应该组测试数据的答案,符合要求的号码数。

Sample Input

2
1 2 100000 100010
1 4 0 20

Sample Output

10
10
 1 #include<stdio.h>
 2 int is(int x,int m,int flag)
 3 {
 4     if(flag==1 && x==0 && m<100000)
 5     {
 6         return 1;
 7     }
 8     int i,j;
 9     i=m%10;
10     j=m/10;
11     if(j!=0 && i!=x)
12         return is(x,j,0);
13     else if( i==x)
14         return 1;
15     else
16         return 0;
17 }
18 int not(int k,int m,int flag)
19 {
20     if(flag==1 && k==0 && m<100000)
21     {
22         return 0;
23     }
24     int i,j;
25     i=m%10;
26     j=m/10;
27     if(j!=0 && i!=k)
28         return not(k,j,0);
29     else if(i==k)
30         return 0;
31     else
32         return 1;
33
34 }
35
36 int dou(int m,int flag)
37 {
38     if(flag==1 && m<10000)
39     {
40         return 1;
41     }
42     int a[6];
43     for(int i=0;i<6;i++)
44     {
45         a[i]=m%10;
46         m/=10;
47     }
48     for(int j=0;j<5;j++)
49     {
50         if(a[j]==a[j+1])
51         {
52             return 1;
53         }
54     }
55     return 0;
56
57
58 }
59 int main()
60 {
61     int x,k,l,r;
62     int n,count;
63     while(scanf("%d",&n)!=EOF)
64     {
65         while(n--)
66         {
67             count=0;
68             scanf("%d%d%d%d",&x,&k,&l,&r);
69             if(l>=0 && r>=l && r<=999999 && x>=0 && k>=0 && x<=9 && k<=9)
70             {
71                 for(int i=l;i<=r;i++)
72                 {
73                     if(is(x,i,1) && not(k,i,1) && dou(i,1))
74                         count++;
75                 }
76                 printf("%d\n",count);
77             }
78         }
79     }
80
81
82     return 1;
83 }
时间: 2024-10-18 11:15:19

武汉科技大学ACM:1010: 电话号码的相关文章

武汉科技大学ACM:1006: 我是老大

Problem Description 今年是2021年,正值武汉科技大学 ACM俱乐部成立10周年.十周年庆祝那天,从ACM俱乐部走出去的各路牛人欢聚一堂,其乐融融.庆祝晚会上,大家纷纷向俱乐部伸出援手,帮助俱乐部度过 经济难关(经费严重不足).其中就职于谷歌的BobLee.Facebook的YYD,自己创办ILOVEMCB公司的MCB,苹果的明爷,IBM的胖富 帅,微软的男神坐在一桌上.胖富帅说我捐a万美元,明爷说a万美元算什么我捐你的两倍,男神说我捐你们两和的4/5,YYD说你们太年轻了,

武汉科技大学ACM :1010: 零起点学算法12——求2个日期之间的天数

Problem Description 水题 Input 输入2个日期,日期按照年月日,年月日之间用符号-隔开(题目包含多组数据) Output 求出这2个日期之间的天数(不包括自身),每组测试数据一行 Sample Input 2011-1-1 2011-1-5 Sample Output 3 HINT 为了简单之见,本题假设输入的是同年同月的2个日期,且第一个日期小于第2个日期 1 #include<stdio.h> 2 3 4 5 int main() 6 7 { 8 9 int y1,

武汉科技大学ACM :1010: 华科版C语言程序设计教程(第二版)例题7.8

Problem Description 输入一个用年月日表示的日期,求该日期是该年的第几天.输入某年的第几天,输出这一天是该年的几月几号,茂茂解不出,需要你的帮助. Input 开始有个整数k,表示询问的种类,如果k=1,后面有三个合法的整数a,b,c,表示输入的年月日,此时输出该日期是该年的第几天:如果k=2,后面有两个合法的整数a,b,求a年的第b天的日期.保证所有的输入合法. Output 对于询问1,输出一个整数表示是该年的第几天. 对于询问2,输出年月月,格式为****/**/** 如

武汉科技大学ACM:1010: 零起点学算法27——判断是否直角三角形

Problem Description 输入三个整数,分别代表三角形的三条边长度,判断能否构成直角三角形 Input 输入3个整数a,b,c(多组数据,-5000000<a,b,c<5000000) Output 如果能组成直角三角形,输出yes否则输出no Sample Input 3 4 5 Sample Output yes 1 #include <stdio.h> 2 int main() 3 { 4 int a, b, c; 5 while(scanf("%d%

武汉科技大学ACM :1010: 零起点学算法103——一只小蜜蜂...

Problem Description 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行.请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数. 其中,蜂房的结构如下所示. Input 输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50). Output 对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行. Sample Input 2 1 2 3 6 Sample Output 1 3 #inclu

武汉科技大学ACM :1001: A+B for Input-Output Practice (I)

Problem Description Your task is to Calculate a + b. Too easy?! Of course! I specially designed the problem for acm beginners.  You must have found that some problems have the same titles with this one, yes, all these problems were designed for the s

武汉科技大学ACM :1009: 华科版C语言程序设计教程(第二版)例题4.18

Problem Description 验证哥德巴赫猜想:任何充分大(>=4)的偶数都可以用两个素数之和表示. Input 输入一个偶数n.(2<n<=10000) Output 找到a.b使得 n=a+b 其中a.b为两个素数,且a<=b. Sample Input 4 100 Sample Output 2 2 3 97 1 #include <iostream> 2 3 #include<math.h> 4 5 using namespace std;

武汉科技大学ACM :1003: 零起点学算法14——三位数反转

Problem Description 水题 Input 输入1个3位数(题目包含多组测试数据) Output 分离该3位数的百位.十位和个位,反转后输出(每组测试数据一行) Sample Input 250 Sample Output 052 HINT 分离出各位数字可以用取余和除数 注意在C语言里,2个整数相乘除结果还是整数 比如8/3在C语言里结果是2 取余采用符号% 比如8%3的结果应该是2即8除以3后的余数 1 #include <stdio.h> 2 3 int main() 4

武汉科技大学ACM :1007: 华科版C语言程序设计教程(第二版)例题4.13

Problem Description 输入两个整数,求他们的最大公约数和最小公倍数. Input 两个整数. Output 最大公约数和最小公倍数. Sample Input 12 9 Sample Output 3 36 HINT 可以把求最小公约数和最小公倍数写成函数,方便以后调用. 1 #include <stdio.h> 2 3 void main() 4 5 { 6 7 int m,n; 8 9 while(scanf("%d%d",&m,&n)