diff --git a/【实践课外】10.函数1/6-1 符号函数.c b/【实践课外】10.函数1/6-1 符号函数.c new file mode 100644 index 0000000..7f3b075 --- /dev/null +++ b/【实践课外】10.函数1/6-1 符号函数.c @@ -0,0 +1,5 @@ +int sign(int x) { + if (x == 0) return 0; + if (x > 0) return 1; + return -1; +} diff --git a/【实践课外】10.函数1/6-1 符号函数.md b/【实践课外】10.函数1/6-1 符号函数.md new file mode 100644 index 0000000..aba83bd --- /dev/null +++ b/【实践课外】10.函数1/6-1 符号函数.md @@ -0,0 +1,38 @@ +# 6-1 符号函数 + +本题要求实现符号函数sign(x)。 + +### 函数接口定义: +```c++ +int sign( int x ); +``` +其中`x`是用户传入的整型参数。符号函数的定义为:若`x`大于0,`sign(x)` = $$1$$;若`x`等于0,`sign(x)` = $$0$$;否则,`sign(x)` = $$-1$$。 + +### 裁判测试程序样例: +```c++ +#include + +int sign( int x ); + +int main() +{ + int x; + + scanf("%d", &x); + printf("sign(%d) = %d\n", x, sign(x)); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例: +```in +10 +``` + +### 输出样例: +```out +sign(10) = 1 +``` diff --git a/【实践课外】10.函数1/6-2 求排列数.c b/【实践课外】10.函数1/6-2 求排列数.c new file mode 100644 index 0000000..cf6295e --- /dev/null +++ b/【实践课外】10.函数1/6-2 求排列数.c @@ -0,0 +1,9 @@ +double fact(int n) { + double res = 1; + + for (int i = 1; i <= n; i++) { + res *= i; + } + + return res; +} diff --git a/【实践课外】10.函数1/6-2 求排列数.md b/【实践课外】10.函数1/6-2 求排列数.md new file mode 100644 index 0000000..2f7dcab --- /dev/null +++ b/【实践课外】10.函数1/6-2 求排列数.md @@ -0,0 +1,38 @@ +# 6-2 求排列数 + +本题要求实现符号函数sign(x)。 + +### 函数接口定义: +```c++ +int sign( int x ); +``` +其中`x`是用户传入的整型参数。符号函数的定义为:若`x`大于0,`sign(x)` = $$1$$;若`x`等于0,`sign(x)` = $$0$$;否则,`sign(x)` = $$-1$$。 + +### 裁判测试程序样例: +```c++ +#include + +int sign( int x ); + +int main() +{ + int x; + + scanf("%d", &x); + printf("sign(%d) = %d\n", x, sign(x)); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例: +```in +10 +``` + +### 输出样例: +```out +sign(10) = 1 +``` diff --git a/【实践课外】10.函数1/6-3 求一个大于10的n位整数w的后n-1位的数,并作为函数值返回。.c b/【实践课外】10.函数1/6-3 求一个大于10的n位整数w的后n-1位的数,并作为函数值返回。.c new file mode 100644 index 0000000..5ad6dd2 --- /dev/null +++ b/【实践课外】10.函数1/6-3 求一个大于10的n位整数w的后n-1位的数,并作为函数值返回。.c @@ -0,0 +1,26 @@ +int get_digits(int x) { + int res = 0; + + while (x) { + x /= 10; + res++; + } + + return res; +} + +int get_pow(int x, int n) { + int res = 1; + + for (int i = 0; i < n; i++) { + res *= x; + } + + return res; +} + +int fun(int w) { + int n = get_digits(w); + + return w % get_pow(10, n - 1); +} diff --git a/【实践课外】10.函数1/6-3 求一个大于10的n位整数w的后n-1位的数,并作为函数值返回。.md b/【实践课外】10.函数1/6-3 求一个大于10的n位整数w的后n-1位的数,并作为函数值返回。.md new file mode 100644 index 0000000..c0f0cb2 --- /dev/null +++ b/【实践课外】10.函数1/6-3 求一个大于10的n位整数w的后n-1位的数,并作为函数值返回。.md @@ -0,0 +1,38 @@ +# 6-3 求一个大于10的n位整数w的后n-1位的数,并作为函数值返回。 + +编写函数fun其功能是:求一个大于10的n位整数w的后n-1位的数,并作为函数值返回。例如:当w=1234时,返回234。 + +### 函数接口定义: +```c +在这里描述函数接口。例如: +int fun(int w); +``` + +在这里解释接口参数。例如:其中 `w` 是用户传入的参数。函数须返回 `w` 除最高位外的值。 + +### 裁判测试程序样例: +```c +在这里给出函数被调用进行测试的例子。例如: +#include + +int fun(int w); + +int main() +{ int m; + scanf("%d", &m); + printf("%d\n", fun(m)); + return 0; +} + +/* 您的程序将被嵌入在这里 */ +``` + +### 输入样例: +```in +1234 +``` + +### 输出样例: +```out +234 +``` diff --git a/【实践课外】10.函数1/6-4 其右上三角(含主对角线)元素之和。.c b/【实践课外】10.函数1/6-4 其右上三角(含主对角线)元素之和。.c new file mode 100644 index 0000000..8438148 --- /dev/null +++ b/【实践课外】10.函数1/6-4 其右上三角(含主对角线)元素之和。.c @@ -0,0 +1,11 @@ +int fun(int a[3][3]) { + int res = 0; + + for (int i = 0; i < 3; i++) { + for (int j = i; j < 3; j++) { + res += a[i][j]; + } + } + + return res; +} diff --git a/【实践课外】10.函数1/6-4 其右上三角(含主对角线)元素之和。.md b/【实践课外】10.函数1/6-4 其右上三角(含主对角线)元素之和。.md new file mode 100644 index 0000000..989edca --- /dev/null +++ b/【实践课外】10.函数1/6-4 其右上三角(含主对角线)元素之和。.md @@ -0,0 +1,38 @@ +# 6-4 其右上三角(含主对角线)元素之和。 + +输入二维数组的所有元素,求二维数组右上三角(包括主对角线)元素之和。 + +### 函数接口定义: +```c +在这里描述函数接口。例如: +int fun(int a[3][3]); +``` +### 裁判测试程序样例: +```c +在这里给出函数被调用进行测试的例子。例如: +#include + +int fun(int a[3][3]); + +int main() +{ int i,j,s,x[3][3];; + for(i=0;i<3;i++) + for(j=0;j<3;j++) + scanf("%d",&x[i][j]); + s=fun(x); + printf("sum=%d\n",s); + return 0; +} +/* 您的答案将被嵌入在这里 */ +``` + +### 输入样例: +```in +1 2 3 4 5 6 7 8 9 +``` + +### 输出样例: +```out +在这里填写相应的输出 +sum=26 +``` diff --git a/【实践课外】10.函数1/6-5 字符串比较.c b/【实践课外】10.函数1/6-5 字符串比较.c new file mode 100644 index 0000000..238b021 --- /dev/null +++ b/【实践课外】10.函数1/6-5 字符串比较.c @@ -0,0 +1,14 @@ +int fun(char a[], char b[]) { + int len_a = strlen(a); + int len_b = strlen(b); + + if (len_a > len_b) return 1; + if (len_a < len_b) return -1; + + for (int i = 0; i < len_a; i++) { + if (a[i] > b[i]) return 1; + if (a[i] < b[i]) return -1; + } + + return 0; +} diff --git a/【实践课外】10.函数1/6-5 字符串比较.md b/【实践课外】10.函数1/6-5 字符串比较.md new file mode 100644 index 0000000..53e9f95 --- /dev/null +++ b/【实践课外】10.函数1/6-5 字符串比较.md @@ -0,0 +1,39 @@ +# 6-5 字符串比较 + +函数fun的功能是比较两个字符串,如果s1=s2,则返回值0;如果s1>s2,则返回值1;如果s1`b`,则返回值1;如果`a`<`b`,则返回-1。 + +### 裁判测试程序样例: +```c++ +#include "stdio.h" +#include "string.h" +int fun(char a[],char b[]); +int main() + {int t; + char s1[40],s2[40]; + gets(s1); gets(s2); + t=fun(s1,s2); + printf("%d\n",t); + return 0; + } + + +/* 请在这里填写答案 */ +``` + +### 输入样例: +```in +asd +fg +``` + +### 输出样例: +```out +-1 +``` diff --git a/【实践课外】10.函数1/6-6 使用函数求素数和.c b/【实践课外】10.函数1/6-6 使用函数求素数和.c new file mode 100644 index 0000000..69e72b0 --- /dev/null +++ b/【实践课外】10.函数1/6-6 使用函数求素数和.c @@ -0,0 +1,19 @@ +int prime(int p) { + if (p <= 1) return 0; + + for (int i = 2; i * i <= p; i++) { + if (p % i == 0) return 0; + } + + return 1; +} + +int PrimeSum(int m, int n) { + int sum = 0; + + for (int i = m; i <= n; i++) { + if (prime(i)) sum += i; + } + + return sum; +} diff --git a/【实践课外】10.函数1/6-6 使用函数求素数和.md b/【实践课外】10.函数1/6-6 使用函数求素数和.md new file mode 100644 index 0000000..ceb4de5 --- /dev/null +++ b/【实践课外】10.函数1/6-6 使用函数求素数和.md @@ -0,0 +1,48 @@ +# 6-6 使用函数求素数和 + +本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。 + +素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。 + +### 函数接口定义: +```c++ +int prime( int p ); +int PrimeSum( int m, int n ); +``` +其中函数`prime`当用户传入参数`p`为素数时返回1,否则返回0;函数`PrimeSum`返回区间[`m`, `n`]内所有素数的和。题目保证用户传入的参数`m`$$\le$$`n`。 + +### 裁判测试程序样例: +```c++ +#include +#include + +int prime( int p ); +int PrimeSum( int m, int n ); + +int main() +{ + int m, n, p; + + scanf("%d %d", &m, &n); + printf("Sum of ( "); + for( p=m; p<=n; p++ ) { + if( prime(p) != 0 ) + printf("%d ", p); + } + printf(") = %d\n", PrimeSum(m, n)); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例: +```in +-1 10 +``` + +### 输出样例: +```out +Sum of ( 2 3 5 7 ) = 17 +``` diff --git a/【实践课外】10.函数1/6-7 使用函数输出水仙花数.c b/【实践课外】10.函数1/6-7 使用函数输出水仙花数.c new file mode 100644 index 0000000..ba10da5 --- /dev/null +++ b/【实践课外】10.函数1/6-7 使用函数输出水仙花数.c @@ -0,0 +1,41 @@ +int get_digits(int x) { + int res = 0; + + while (x) { + x /= 10; + res++; + } + + return res; +} + +int get_pow(int x, int n) { + int res = 1; + + for (int i = 0; i < n; i++) { + res *= x; + } + + return res; +} + +int narcissistic(int number) { + int sum = 0; + int tmp = number; + int digits = get_digits(number); + + while (tmp) { + sum += get_pow(tmp % 10, digits); + tmp /= 10; + } + + return sum == number; +} + +void PrintN(int m, int n) { + for (int i = m + 1; i <= n - 1; i++) { + if (narcissistic(i)) { + printf("%d\n", i); + } + } +} diff --git a/【实践课外】10.函数1/6-7 使用函数输出水仙花数.md b/【实践课外】10.函数1/6-7 使用函数输出水仙花数.md new file mode 100644 index 0000000..873dfcd --- /dev/null +++ b/【实践课外】10.函数1/6-7 使用函数输出水仙花数.md @@ -0,0 +1,48 @@ +# 6-7 使用函数输出水仙花数 + +水仙花数是指一个$$N$$位正整数($$N\ge 3$$),它的每个位上的数字的$$N$$次幂之和等于它本身。例如:$$153 = 1^3 + 5^3+ 3^3$$。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间$$(m,n)$$内所有的水仙花数。 + +### 函数接口定义: +```c++ +int narcissistic( int number ); +void PrintN( int m, int n ); +``` +函数`narcissistic`判断`number`是否为水仙花数,是则返回1,否则返回0。 + +函数`PrintN`则打印开区间(`m`, `n`)内所有的水仙花数,每个数字占一行。题目保证100$$\le$$`m`$$\le$$`n`$$\le$$10000。 + +### 裁判测试程序样例: +```c++ +#include + +int narcissistic( int number ); +void PrintN( int m, int n ); + +int main() +{ + int m, n; + + scanf("%d %d", &m, &n); + if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m); + PrintN(m, n); + if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例: +```in +153 400 + +``` + +### 输出样例: +```out +153 is a narcissistic number +370 +371 + +``` diff --git a/【实践课外】10.函数1/7-1 寻找自守数.c b/【实践课外】10.函数1/7-1 寻找自守数.c new file mode 100644 index 0000000..2b3556b --- /dev/null +++ b/【实践课外】10.函数1/7-1 寻找自守数.c @@ -0,0 +1,54 @@ +#include + +int get_digits(int x) { + int res = 0; + + while (x) { + x /= 10; + res++; + } + + return res; +} + +int get_pow(int x, int n) { + int res = 1; + + for (int i = 1; i <= n; i++) { + res *= x; + } + + return res; +} + +int check(int x) { + int pow = x * x; + int digits = get_digits(pow); + + for (int i = 0; i <= digits; i++) { + if (x == pow % get_pow(10, i)) { + return 1; + } + } + + return 0; +} + +int main() { + int a, b, cnt = 0; + + scanf("%d%d", &a, &b); + + for (int i = a; i <= b; i++) { + if (check(i)) { + printf("%d\n", i); + cnt++; + } + } + + if (cnt == 0) { + printf("None\n"); + } + + return 0; +} diff --git a/【实践课外】10.函数1/7-1 寻找自守数.md b/【实践课外】10.函数1/7-1 寻找自守数.md new file mode 100644 index 0000000..24298a2 --- /dev/null +++ b/【实践课外】10.函数1/7-1 寻找自守数.md @@ -0,0 +1,35 @@ +# 7-1 寻找自守数 + +所谓自守数(也称守形数),是指其平方数的低位部分恰为该数本身的自然数。例如:$$25^2 = 625$$,因此25是自守数。(注:0 和 1 也算自守数。) + +请编写程序,输出指定范围内的所有自守数。若指定范围内不存在自守数,则输出None。 + +#### 输入格式 + +正整数 $$a$$ 和 $$b$$, 且 $$a \leq b \leq 10000$$ + +#### 输出格式 + +若 $$[a, b]$$ 内存在自守数,则按由小到大的顺序输出,每行输出一个自守数;若不存在自守数,则输出None。 + +#### 输入样例1 +```in +10 80 + +``` +#### 输出样例1 +```out +25 +76 + +``` +#### 输入样例2 +```in +400 600 + +``` +#### 输出样例2 +```out +None + +```