6-1 设计函数isAmicable
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
亲和数,又称相亲数、友爱数、友好数,指两个正整数中,彼此的全部约数之和(本身除外)与另一方相等。
例如对于220有:
1+2+4+5+10+11+20+22+44+55+110=284
而对于284有:
1+2+4+71+142=220
毕达哥拉斯曾说:“朋友是你灵魂的倩影,要像220与284一样亲密。”。现请你设计一个函数用来判断两个数是否是亲和数。
输入数据第一行包含一个整数t(0<t<20),接下有t行,每行一个实例,包含两个用空格分隔的整数m,n(0 < m,n < 10000000 );
输出数据共t行,每行依次对应输入的t个实例,对于每个测试实例,如果m和n是亲和数的话输出YES,否则输出NO。
函数接口定义:
int isAmicable(int number1 , int number2 ) ;
其中 number1
和 number2
都是用户传入的参数。 且不会超过int
的范围;如果这两个数是亲和数则函数返回 1
,否则返回 0
。
裁判测试程序样例:
#include <stdio.h>
int isAmicable(int number1 , int number2 ) ;
int main()
{
int t , num1 , num2 ;
scanf( "%d" , &t ) ;
while ( t -- )
{
scanf( "%d%d", &num1 , &num2);
if ( isAmicable( num1 , num2 ) )
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
2
30 60
220 284
输出样例:
NO
YES
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int isAmicable(int number1, int number2)
{
int sum1 = 0, sum2 = 0;
for(int i = 1; i < number1; i++)
{
if(number1%i==0) sum1 += i;
}
for(int j = 1; j < number2; j++)
{
if(number2%j==0) sum2 += j;
}
if(number1==sum2&&number2==sum1) return 1;
else return 0;
}
6-2 整数重组
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
本题要求实现一个函数,该函数可以按规定重新组合一个整数。重组的规则为:我们给定一个位置,该位置前的数字不变,指定位置的数字挪到个位,该位置后边的数字依次向前挪一位。例如:待重组整数为1234567890,指定位置为5,则重组后的数字为1234678905。
输入:只有一行,为用空格分隔的两个整数,依次代表待重组整数及被挪动数字的位置。
输出:也只有一行,为重组后的整数。
1、测试用例保证合法;
2、待重组整数非负且位数小于17;
3、如果指定位置为1,则待重组整数第二位不为0,或者说重组后整数的位数不会发生变化(这个条件意义不大,重组后按整数正常输出即可,即使有这样的数据也能正确输出,这里只是明确一下重组后没有前导0)。
函数接口定义:
long long recombination(long long num , int position) ;
其中 num
和 position
都是用户传入的参数。 num
代表待重组整数; position
代表被挪动数字的位置。函数的返回值为重组后的整数。
裁判测试程序样例:
#include <stdio.h>
long long recombination(long long num , int position) ;
int main()
{
long long num ;
int position ;
scanf( "%lld%d" , &num , &position );
printf( "%lld\n" , recombination( num , position) ) ;
return 0;
}
/* 请在这里填写答案 */
输入样例:
1234567890 5
输出样例:
1234678905
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <math.h>
long long recombination(long long num, int position)
{
if(num==0) return 0;
int len = 0;
long long n = num;
while(n != 0)
{
len++;
n = n/10;
}
long long fro, beh;
fro = num - num%(long long)pow(10,len-position+1);
beh = num%(long long)pow(10,len-position)*10;
long long temp = num%(long long)pow(10,len-position+1);
long long thenumber = temp/(long long)pow(10,len-position);
long long res = fro + beh + thenumber;
return res;
}
7-3 贴邮票四
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
你叕要贴邮票了。现有1元、2元、5元的邮票各无数张。这次的规则是邮资固定,所贴邮票张数固定。你的任务是计算出共有多少种贴法。
输入格式:
第一行为两个用空格分隔的整数m,n(0<m,n<1000),依次代表邮资(单位为元)和规定所贴邮票的张数。
输出格式:
为一个整数,代表贴法的总数。
测试用例保证输入合法,且所有整数可以用int存储
输入样例:
20 10
输出样例:
3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main()
{
int m, n;
scanf("%d %d", &m, &n);
int x, y, z;
int count = 0;
for(x = 0;x <= n; x++)
{
for(y = 0; y <= n; y++)
{
for(z = 0; z <= n; z++){
if((x + 2*y + 5*z == m)&&(x + y + z == n)) count++;
}
}
}
printf("%d", count);
return 0;
}
7-5 多少个一
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
给定一个整数n(0 < n < 10000 ),如果n不能被2或5整除,那么n的某个倍数一定由若干个1组成。请写程序计算出最小的这样的倍数的位数。
注意:从逻辑上讲,最小的这样的倍数是可能超过long long 的存储范围的,但我们的测试用例保证没有这样的测试数据。
样例解释:最小的这样的倍数为111。
输入格式:
只有一整数代表n。
输出格式:
也只有一个整数,为计算结果。
输入样例:
3
输出样例:
3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include<stdio.h>
int main(){
int n,len;
long long mul;
scanf("%d",&n);
mul=1;
for(len=1; mul%n!=0 ; len++){
mul = mul*10+1;
}
printf("%d",len);
return 0;
}
7-4 数字位数
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
有一个整数数列,第1项为1,第2项为12,第3项为123,第4项为1234,依此类推,有第10项为12345678910,第15项为123456789101112131415 等等。现请你写一段程序计算该数列第n项的位数。
输入格式:
只有一个整数 n (1<=n<=10000000)。
输出格式:
只有一个整数,为该数列第n项的位数。
测试用例保证输入合法。
输入样例:
15
输出样例:
21
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int len = 0;
int i, j;
for(i = 1; i <= n; i++)
{
j = i;
while(j != 0)
{
len++;
j = j/10;
}
}
printf("%d", len);
return 0;
}
7-6 谁是凶手
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
某处发生了一起凶杀案,警察共抓到了5名嫌疑人,但不能确定他们谁是凶手。于是,警察对他们5个人分别进行了审问。假设这5名嫌疑人分别为5号,6号,7号,8号和9号,审问结果为:5号说8号是凶手,6号说7号是凶手,7号说9号不是凶手,8号说6号不是凶手,9号说7号是凶手。现在警察知道凶手只有一个且一定在这5人当中。后证实他们中有3个人说了实话(也就是说另两个人说了假话)。现请你写一段程序来找出谁是凶手。
输入格式:
第一行为一个整数 n (0<=n<=5),代表说了实话的人数,第2-6行每行均为两个由空格分隔的整数,代表5名嫌疑人的口供。其中前边的整数代表嫌疑人所说的号码,后边的整数代表他说的这个号码是否为凶手(1代表是凶手,0代表不是凶手)。比如输入样例给出的数据就是我们前边所说的情况。
输出格式:
只有一个整数,为凶手的号码。
测试用例保证输入合法。
输入样例:
3
8 1
7 1
9 0
6 0
7 1
输出样例:
8
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main()
{
int right;
scanf("%d", &right);
int a, b, c, d, e;
int A, B, C, D, E;
scanf("%d %d %d %d %d %d %d %d %d %d", &a, &A, &b, &B, &c, &C, &d, &D, &e, &E);
int Right = 0;
for(int i = 5; i <= 9; i++)
{
Right = 0;
if(a == i)
{
if(A == 1) Right++;
}
else if(a != i)
{
if(A == 0) Right++;
}
if(b == i)
{
if(B == 1) Right++;
}
else if(b != i)
{
if(B == 0) Right++;
}
if(c == i)
{
if(C == 1) Right++;
}
else if(c != i)
{
if(C == 0) Right++;
}
if(d == i)
{
if(D == 1) Right++;
}
else if(d != i)
{
if(D == 0) Right++;
}
if(e == i)
{
if(E == 1) Right++;
}
else if(e != i)
{
if(E == 0) Right++;
}
if(Right == right) printf("%d",i);
}
return 0;
}
7-4 算数
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
有一个数x,将它的3倍减5,计算的结果再3倍后减5,这样反复经过n次,最后计算的结果为m。请问x是多少?
输入格式:
只有一行,为两个用空格分隔的整数依次代表n(1<n),m(0<m)。
输出格式:
为一个整数,代表x。测试用例保证合法且可以用int存储。
输入样例:
4 691
输出样例:
11
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main()
{
int n, m;
scanf("%d %d", &n, &m);
int x = 0;
for(int i = 1; i <= n; i++)
{
if(i == 1) x = (m + 5)/3;
else x = (x + 5)/3;
}
printf("%d", x);
return 0;
}
7-6 方格棋盘
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
已知正整数n、m,设有一个nXm方格的棋盘。求出该棋盘中包含正方形与长方形(长方形中不包括正方形)的个数。
例如,当n=2,m=3时,正方形的个数有8个,即边长为1的正方形有6个;边长为2的正方形有2个。长方形的个数有10个,即2X1的长方形有4个;1X2的长方形有3个;3X1的长方形有2个;3X2的长方形有1个。
输入格式:
只有一行,为用空格分隔的两个正整数n、m(1<=n<=100,1<=m<=100),代表棋盘有n行m列。
输出格式:
也只有一行,为用空格分隔的两个正整数依次代表正方形的个数和长方形的个数。
输入样例一:
3 4
输出样例一:
20 40
输入样例二:
2 5
输出样例二:
14 31
输入样例三:
1 7
输出样例三:
7 21
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main()
{
int n, m;
scanf("%d %d", &n, &m);
if(n > m)
{
int temp = n;
n = m;
m = temp;
}
int alls = 0;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
alls = alls + i*j;
}
}
int s = 0;
for(int k = 0; k <= (n-1); k++)
{
s = s + (m-k)*(n-k);
}
int nots = alls - s;
printf("%d %d", s, nots);
return 0;
}