A
题目描述
C语言函数,数学函数,傻傻分不清楚~~
题目很简单,我们定义F(x)是满足x取余a乘b的积等于0(即:x%(a*b)==0)这样的a,b的组数。现在给你一个n,你需要求出 F(n)。
比如说当n=4时,a b分别可以是——1*1、1*2、1*4、2*1、2*2、4*1,共6种情况,所以F(4) = 6。
输入
多组输入(不会超过200组)
每组测试数据输入一个整数n (1 <= n <= 10^8)
输出
每组测试数据输出 Case x: y ,x 表示第x组测试数据,y表示F(n)的值,细节参考样例。
样例输入
1
2
3
4
样例输出
Case 1: 1
Case 2: 3
Case 3: 3
Case 4: 6
#include
#include
#include
#define maxn 10009
using namespace std;
int a[maxn+10];
int prime[maxn+10],p;
void init_p(){
p=0;
memset(a,0,sizeof(a));
for(int i=2;ix, 则共有sum(x)种合法答案!
如8:(下列冒号前表示a,冒号后表示b)
1:1,2,4,8
2:1,2,4
4:1,2
8:1
得出:f(p^k) = sum(k+1);
对于f(p*q);
如果令f(q)的分解a*b恒为1(即无视),则f(p*q)=f(q);
同理令f(p)的分解为1,f(p*q)=f(q);
根据乘法定理: f(p*q)=f(p)*f(q);
另外还有一种比较明显的思路:
要使得n%(a*b)==0就是令a*b为n的因子,
设a恒为1,则b可取数为n的因子个数;
再对b就行一次分解即可(这节比较重要);
还是可以用8做例子:
1:1 1*(1*1)
2:1,2 1*(2*1),1*(2*2)
4:1,2,2 1*(4*1),1*(2*2),1*(2*2)
8:1,2,4,8 1*(8*1),1*(2*4),1*(4*2),1*(1*8)
同样还是sum!
*/
B
题目描述
“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数
现在出题如下:
对于10进制数87:
STEP1:87+78 = 165 STEP2:165+561 = 726
STEP3:726+627 = 1353 STEP4:1353+3531 = 4884
上例用了4步得到回文数,在这里的一步是指进行了一次N进制的加法
写一个程序,给定一个N(2<=N<=10)进制数 , M(小于1000位数),求最少经过几步可以得到回文数。
如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”
输入
N和M
输出
步数
样例输入
9
87
样例输出
STEP=6
#include
#include
using namespace std;
#define maxn 30009
char a[maxn],b[maxn];
int n;
void rev(char*s){//反转s
int j = strlen(s)-1,i=0;
char t;
while(i
C
题目描述
话说,小C经过上次被小T实力坑了一把以后呀,他就决定发明一个数字游戏来坑一坑小T!游戏规则是这样~
在游戏开始前,小C会任意的选出一个正整数n(1≤n≤2^32-1),同时令m=1。在玩的过程当中,小C和小T每个人都可以将m的值扩大2到9中的任意倍数(倍数一定是整数),两个人一人扩大一次,第一个使m≥n的人就是最后的赢家。
因为两个人都在互相算计,所以都是用的最佳策略,问最后是谁赢?
(上次因为吃了先手的亏,小C决定先手,也就是说:每次都是小C第一个玩)。
输入
多组输入(文件尾结束)
每行一个正整数n
输出
对于每个结果:
如果小C赢,则输出"C",
如果小T赢,则输出"T"。
(记得换行!!)
样例输入
9
样例输出
C
#include
#include
#define maxn 4294967295L
long long arr[100];
int p;
void init(){
int i;
for(i=1;;i++){
arr[i]=(long long)pow(18,i);
if(arr[i]>=4294967295L)break;
}
p=i;
}
int main(){
init();
long long n;
while(~scanf("%lld",&n)){
int i;
for(i=1;i=n)break;
if(n>arr[i]/2)printf("T\n");
else printf("C\n");
}
return 0;
}
//4294967295
/**
博弈论!
对于这中不公平博弈,先手是很占优势的;这类题的通解思路:
如果先手可以到达终止局面,直接跳终止局面获得胜利
否则,把对手推到必败局面,相当于获得胜利!
再否则,开局投降无需挣扎....
思路很简单,关键在找必败局面:
把问题稍微转换一下,便于找必败局面: 把m每次乘以2-9直到大于等于n -> 把n每次除以2-9(向上取整)直到n<=1为获胜;
那么可以一次到达目标局的区间是[1-9]
第一个必败局面是(9,18],因为除9达不到1,除其他数对手必胜;
同理可以一次到达(9-18]的必败局(新目标局)的区间是(19,18*9]
再推一个必败局(18*9,18*9*2],再推一个必胜局[18*9*2+1,18*9*2*9]
再推一个必败局(18*9*2*9,18*9*2*9*2]
呵呵,找到规律了吗?
*/
D
题目描述
有小明和小曹两个无聊的人,对字符串操作起了兴趣,小曹给出一个由小写字母构成的字符串,小明给出另一个比小曹更长的字符串,也由小写字母组成,如果能通过魔法转换使小明的串和小曹的变成同一个,那么他们两个人都会很开心。这里魔法指的是小明的串可以任意删掉某个字符,或者把某些字符对照字符变化表变化。如:
小曹的串是 abba;
小明的串是 addba;
字符变化表 d b (表示d能转换成b)。
那么小明可以通过删掉第一个d,然后将第二个d转换成b将串变成abba。
现在请你帮忙判断:他们能不能通过魔法转换使两个人的串变成一样呢?
输入
首先输入T,表示总共有T组测试数据(T <= 40)。
接下来共T组数据,每组数据第一行输入小曹的字符串,第二行输入小明的字符串(数据保证字符串长度不超过1000,小明的串的长度大于等于小曹的,且所有字符均为小写字母)。接着输入字母表,先输入m,表示有m个字符变换方式(m< = 100),接着m行每行输入两个小写字母,表示前一个可以变为后一个(但并不代表后一个能变成前一个)。
输出
对于每组数据,先输出Case数。
如果可以通过魔法转换使两个人的串变成一样,输出“happy”,
否则输出“unhappy”。
每组数据占一行,具体输出格式参见样例。
样例输入
2
abba
addba
1
d b
a
dd
0
样例输出
Case #1: happy
Case #2: unhappy
#include
#include
#define maxn 30
char a[1009],b[1009];
int g[30][30];
void init(){
for(int i=0;i
E
题目描述
上了大学的小明又在做题了,他好累,所以请你帮忙:
设n为正整数,令f(n)为所有gcd(x,y)的最大值,且x和y满足1<=x 举个例子:当n=3时,x,y可以取1,2或1,3或2,3,gcd(x,y)的最大值为1,因此f(3)=1。 给定正整数n,求当2<=i<=2*n+1时,所有f(i)的平方和。 输入 多组输入,最多100组 每组一个正整数 n < 10^9. 输出 仅一行,所求结果对10007取模的结果。 样例输入 样例输出 F 题目描述 拉丁方的定义 : n个不同的符号(这里取1到n),在n*n的方阵中每个符号在每一行和每一列均只出现一次,那么我们称此方阵为n阶的拉丁方 求最小n阶拉丁方,最小拉丁方中每行所表示的十进制数最小 输入 多组输入,每组一个n ( n <= 12 ) 输出 输出最小拉丁方,每组输出数据之间用一个换行隔开 样例输入 样例输出 G 题目描述 问题很简单,找出现了3*k-1次的数 ( k > 0 ) 输入 输入一个 n 接下来就是n个数 确保有一个数出现了 3*k-1次,其余数都出现了3*m 次 (m > 0 ) 对于所有的数在int范围内,且n小于216660 输出 找出现了3*k-1次 的那个数 样例输入 样例输出 H 题目描述 小C和小T骑车去郊游,小T先出发,速度为x米每分钟,行驶m分钟后,小C带着一条狗出发,小C的速度为y米每分钟,而狗则以每分钟z米的速度向小T跑去,追上小T后又会返回,如此往复,直到小C追上小T。问:当小C追上小T的时候,狗跑了多远? 输入 第一行输入一个整数N,表示测试数据的组数(N<100) 输出 输出狗跑的路径长度,结果保留小数点后两位。 样例输入 样例输出 I 题目描述 小小成现在拥有n根火柴,假设小小成只能按照上图的方式用火柴摆数字,并且不能进行任何运算,而且必须 用完所有火柴棍,请问能摆出来的最大数字和次大数字是多少 。 输入 多组输入( 最多 2000 组 ) 每组数据仅一行,包含一个正整数 n 。 1 ≤ n ≤2000 输出 对于每组数据输出一行,如果能摆出来的最大数字和次大数字都存在,则这一行包含两个非负整数,表示能摆出来的最大数字和次大数字 否则在这一行输出 small small cheng is silly boy 样例输入 样例输出 J 题目描述 实验室除了是一个学习的地方,更是一个非常好玩的地方,有各种各样的活动充斥在学习之间。 在某一次活动中,黄sir带着大家一起去爬山。历经了千辛万苦后终于爬上了山顶,大家是又累又渴。。但是在山顶,只有一口井,每次只能容下一个人去打水。那么问题来了! 现在假设实验室有n个人,每个人打水的时间为ai,请给出一个排队的规则,使所有人的平均等待时间最小! 注意:若两个人的等待时间相同,则序号小的优先。 输入 多组输入 每组两行 第一行为n,表示有多少个人 第二行有n个数,分别表示每个人打水的时间a[1],a[2],a[3],a[4],……a[n],每个数据之间有一个空格 数据范围: 0 输出 对于每组输入 输出有两行(格式见样例) 第一行为使所有人的平均等待时间最小的排队顺序 第二行为最小的平均等待时间(输出结果精确到小数点后两位) 样例输入 样例输出 提示 错误已更正~~ K 题目描述 最近发现了一些神奇的数字,就是各个位都不相同的四位数,如1234 , 把所有数字从大到小排序后得到的数,减去从小到大得到的数,一直如此减下去,竟然一定会得到6174,那么你能求出要多少次这样的操作才能得到6174吗? 例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174。这样就回到了6174。操作步数为3,所以输出3。 输入 第一行输入n,代表有n组测试数据。 输出 经过多少次上面描述的操作才能出现6174。 样例输入 样例输出 3
28
#include
1
2
1
1 2
2 1
#include
5
3 3 3 2 2
2
#include
每组测试数据占一行,是四个正整数,分别为m,x,y,z(数据保证X1
5 10 15 20
200.00
#include
5
1
71 17
small small cheng is silly boy
#include
10
56 12 1 99 1000 234 33 55 99 812
3 2 7 8 1 4 9 6 10 5
291.90
#include
接下来n行每行都写一个各位数字互不相同的四位数1
1234
3
#include