题目描述 Description
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入描述 Input Description
有2行,第1行为1个正整数,表示所生成的随机数的N个数:
第2行有N个用空格隔开的正整数,为所产生的随机数
输出描述 Output Description
第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小
到大排好序的不相同的随机数。
样例输入 Sample Input
10
20 40 32 67 40 20 89 300 400 15
样例输出 Sample Output
8
15 20 32 40 67 89 300 400
/*
作者:hling_so
题目:p1075 明明的随机数
*/
#include
int main() {
int a[101] = {0};
int i, j, n, real, temp;
scanf("%d", &n);
real = n;
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i ; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (i = 0; i < n; i++) {
if (a[i] == a[i + 1]) {
real--;
}
}
printf("%d\n", real);
for (i = 0; i < n; i++) {
if (i > 0 && a[i] == a[i - 1]) {
continue;
} else {
printf("%d ", a[i]);
}
}
return 0;
}
题目描述 Description
给出n和n个整数,希望你从小到大给他们排序
输入描述 Input Description
第一行一个正整数n
第二行n个用空格隔开的整数
输出描述 Output Description
输出仅一行,从小到大输出n个用空格隔开的整数
样例输入 Sample Input
3
3 1 2
样例输出 Sample Output
1 2 3
数据范围及提示 Data Size & Hint
1<=n<=100000
#include
#include
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int *array;
int n;
scanf("%d",&n);
array=(int*)malloc(n*sizeof(int));
int i=0;
for(;iscanf("%d",(array+i));
}
qsort(array,n,sizeof(int),comp);
for(i=0;iprintf("%d ",array[i]);
}
return 0;
}
现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
输入描述 Input Description
整数N(1≤N≤10000000)
输出描述 Output Description
表中的第N项
样例输入 Sample Input
7
样例输出 Sample Output
1/4
数据范围及提示 Data Size & Hint
见描述
#include
int main() {
int a = 1, b = 1, flag = 1, count = 1, n;
scanf("%d", &n);
while (count != n) {
if (flag) {
b++; count++;
if (count == n){
printf("%d/%d", a, b);
return 0;
}
while (b != 1) {
a++; b--; count++;
if (count == n){
printf("%d/%d", a, b);
return 0;
}
}
}
flag = 0;
if(!flag) {
a++;count++;
if (count == n){
printf("%d/%d", a, b);
return 0;
}
while (a != 1) {
a--; b++; count++;
if (count == n){
printf("%d/%d", a, b);
return 0;
}
}
}
flag = 1;
}
}
题目描述 Description
小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.
输入描述 Input Description
n(即n行n列)
输出描述 Output Description
n+1行,n行为组成的矩阵,最后一行为对角线数字之和
样例输入 Sample Input
3
样例输出 Sample Output
5 4 3
6 1 2
7 8 9
25
数据范围及提示 Data Size & Hint
/*
作者:hling_so
题目:p1160 蛇形矩阵
*/
#include
int main() {
int n, sum = 1, flag = 1, i, j, k, a[101][101] = {0};
scanf("%d", &n);
int mid = (n + 1) / 2;
a[mid][mid] = 1;
j = mid; k = mid + 1;
for (i = 2; i <= n * n; i++) {
a[j][k] = i;
if (flag == 1) {
if (j + k == n + 1) {
sum += i;
flag = 2;
k--;
} else {
j--;
}
} else if (flag == 2) {
if (j == k) {
sum += i;
flag = 3;
j++;
} else {
k--;
}
} else if (flag == 3) {
if (j + k == n + 1) {
sum += i;
flag = 4;
k++;
} else {
j++;
}
} else if (flag == 4) {
if (j == k - 1) {
flag = 1;
j--;
} else {
if (j == k)
sum += i;
k++;
}
}
}
for (j = 1; j <= n; j++)
for (k = 1; k <= n; k++) {
if (k % n == 0)
printf("%d\n", a[j][k]);
else
printf("%d ", a[j][k]);
}
printf("%d\n", sum);
return 0;
}
题目描述 Description
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数
条件: 1.P,Q是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.
输入描述 Input Description
二个正整数x0,y0
输出描述 Output Description
满足条件的所有可能的两个正整数的个数
样例输入 Sample Input
3 60
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
/*
作者:hling_so
题目:p1012 最大公约数和最小公倍数问题
*/
#include
#include
int findgcd(int a, int b);
int main() {
int gcd, lcm, remain, i, ans = 0;
scanf("%d%d", &gcd, &lcm);
if (lcm % gcd != 0) {
printf("0");
return 0;
}
remain = lcm / gcd;
for (i = 1; i <= remain; i++) {
if (remain % i == 0 && findgcd(remain / i, i) == 1) {
ans++;
}
}
printf("%d\n", ans);
return 0;
}
int findgcd(int a, int b) {
int temp;
if (a < b) {
temp = a;
a = b;
b = temp;
}
while (a % b != 0) {
temp = a % b;
if (temp == 1) {
return 1;
}
a = b;
b = temp;
}
return b;
}
题目描述 Description
求两个数A和B的最大公约数。 1<=A,B<=2^31-1
输入描述 Input Description
两个整数A和B
输出描述 Output Description
最大公约数gcd(A,B)
样例输入 Sample Input
8 12
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
/*
作者:hling_so
题目:p1212 最大公约数
*/
#include
int main(){
long a, b, temp, remain;
scanf("%ld%ld", &a, &b);
if (a < b) {
temp = a;
a = b;
b = temp;
}
while (a % b != 0) {
remain = a % b;
a = b;
b = remain;
}
printf("%ld\n", b);
return 0;
}
题目描述 Description
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。
素数在数论中有着很重要的地位。比1大但不是素数的数称为合数。1和0既非素数也非合数。质数是与合数相对立的两个概念,二者构成了数论当中最基础的定义之一。基于质数定义的基础之上而建立的问题有很多世界级的难题,如哥德巴赫猜想等。算术基本定理证明每个大于1的正整数都可以写成素数的乘积,并且这种乘积的形式是唯一的。这个定理的重要一点是,将1排斥在素数集合以外。如果1被认为是素数,那么这些严格的阐述就不得不加上一些限制条件。
概念
只有1和它本身两个约数的自然数,叫质数(Prime Number)。(如:由2÷1=2,2÷2=1,可知2的约数只有1和它本身2这两个约数,所以2就是质数。与之相对立的是合数:“除了1和它本身两个约数外,还有其它约数的数,叫合数。”如:4÷1=4,4÷2=2,4÷4=1,很显然,4的约数除了1和它本身4这两个约数以外,还有约数2,所以4是合数。)
100以内的质数有2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,在100内共有25个质数。
注:(1)1既不是质数也不是合数。因为它的约数有且只有1这一个约数。
(2)2和3是所有素数中唯一两个连着的数 .
输入描述 Input Description
第一行输入一个正整数n,n<=30000
输出描述 Output Description
如果该数是质数,则输出\t
否则输出\n
样例输入 Sample Input
输入样例1
13
输入样例2
8
样例输出 Sample Output
样例输出1
\t
样例输出2
\n
数据范围及提示 Data Size & Hint
c或c++的初学者注意,”\”的意思
/*
作者:hling_so
题目:p1430 素数判定
*/
#include
#include
int main() {
int n, i;
scanf("%d", &n);
if (1 == n || 2 == n) {
printf ("\\n");
} else {
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
printf("\\n");
return 0;
}
}
printf("\\t");
}
return 0;
}