如果不太了解各种排序算法可以参考菜鸟教程(希望对你有帮助)
菜鸟教程排序算法
有一个包含奇数个项的整数序列,请编程按照以下规则排序:最大值排在中间,最小值排在最左,中值排在最右,其它值清为0。输入2行,第一行n表示要输入的数的个数,n是奇数。第二行输入的n个数。输出,排序后的数组,数据空格分隔,最后一个数据后面没有空格。
输入样例:
5
12 20 9 88 32
输出样例:
9 0 88 0 20
#define _CRT_SECURE_NO_WARNINGS
#include
#include
/*冒泡排序法*/
void booble(int* array, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (array[j]>array[j+1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
int t = (n - 1) / 2;//t即为中间是的数的序号
/*交换中间的数和最大的数的位置*/
int temp = array[t];
array[t] = array[n-1];
array[n - 1] = temp;
/*除中间数和最大最小数全都赋值为0*/
for (size_t i = 1; i < n-1; i++)
{
if (i!=t)
{
array[i] = 0;
}
}
}
int main() {
int n;
scanf("%d", &n);
int *description = (int*)malloc(n * sizeof(int));
for (size_t i = 0; i < n; i++)
{
scanf("%d", (description+i));
}
booble(description, n);
for (size_t i = 0; i < n-1; i++)
{
printf("%d ", *(description + i));
}
printf("%d", *(description+n-1));
}
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。
输入格式: 输入表示若干种石子的初始情况,包含两个非负整数 a 和 b ,表示两堆石子的数目, a 和 b 都不大于1,000,000,000 。
输出格式: 包含一个数字 1 或 0 ,如果最后你是胜者,则为 1 ,反之,则为 0 。
输入样例:
2 1
输出样例:
0
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
// freopen("in.txt","r",stdin);
int a, b, k, ta;
scanf("%d%d", &a, &b);
if (a > b) { int t = a; a = b, b = t; }
k = b - a;
ta = (int)floor(k * ((sqrt(5.0) + 1) / 2));
printf("%d", ta == a ? 0 : 1);
return 0;
}
题目描述:
输入公元年份和月份,输出该月份的天数。
输入输出格式:
输入: 年,月(逗号分隔)
输出: 天数
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
int year, mon, day;
scanf("%d,%d", &year, &mon);
if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12)
{
day = 31;
}
else if (mon == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) day = 29;
else day = 28;
}
else day = 30;
printf("%d", day);
return 0;
}
题目描述:
输入两个正整数,输出其中最大公约数和最小公倍数。
输入输出格式:
输入: 从键盘输入两个正整数
输出: 最大公约数和最小公倍数。
样例:
输入:
15,25
输出:
最大公约数是5
最小公倍数是75
1. 求p和q的最大公约数的欧几里德算法:
(1)输入p和q(p>q)
(2)计算p和q的余数r
(3)r=0时,q即为最大公约数,转第(4)步
否则,令p=q,q=r,继续执行第(2)步
(4)输出q
2. p和q的最小公倍数为p乘以q再除以它们的最大公约数。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
void swap(int*a, int*b) {
int temp = a;
a = b;
b = temp;
}
int main()
{
int num1,num2;
scanf("%d,%d", &num1, &num2);
int multiple = num1 * num2;
if (num1<num2)
{
swap(&num1, &num2);
}
while (num1 % num2 !=0)
{
int r = num1 % num2;
num1 = num2;
num2 = r;
}
printf("最大公约数是%d\n最小公倍数是%d\n", num2, multiple / num2);
return 0;
}
题目描述:
查找一个字符在字符串中的第一个位置并输出这个位置。
输入输出格式:
输入:待查找的字符串和需要查找的字符。(输入时,待查找的字符串与所需查找的字符用*号隔开)
输出:字符的位置(如有多个相同的字符,只查找第一个。)
样例:
输入:
I am a student*m
输出:
4
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
char num1[200];
char num2;
gets(num1);
num2 = num1[strlen(num1) - 1];
for (size_t i = 0; i < strlen(num1); i++)
{
if (num1[i]==num2)
{
printf("%d", i+1);
return 0;
}
}
}
题目描述:
输入两个整型数组(假设数组的大小为不超过10)的各个元素,输出不是两个数组共有的元素,并从小到大排序输出。
输入输出格式:
输入:两个数组的元素(小于10个),数组中第一个数据指示元素的个数
输出:两个数组的元素中非共有的元素,并且从小到大进行排序
样例:
输入:
7 1 2 3 4 5 6 7
6 5 6 7 8 9 0
输出:
0 1 2 3 4 8 9
#include
void bubblesort(int a[], int n);//函数原型
int main()
{
int a[10]; int b[10]; int c[20],d[20];
int n,k=0,i,j;
scanf("%d", &a[0]);
for (i = 1; i <=a[0]; i++)
scanf(" %d", &a[i]);
scanf("%d", &b[0]);
for(i=1;i<=b[0];i++)
scanf(" %d", &b[i]);//数组的输入
for (i = 1; i <= a[0]; i++)
c[i-1] = a[i];
for (i =1; i <=b[0]; i++)
c[i+a[0]-1] = b[i];//a、b两个数组合为一个数组c,可能是这一步的多余导致过程繁杂
for (i = 0; i < a[0] + b[0]; i++)//往下判断数组元素是否重复,并且将不重复项赋给数组d
{
int w = 0;//易漏
for (j = 0;j< a[0] + b[0]; j++)
{
if (c[i] == c[j])
w++;//巧妙的判断
}
if (w==1)//等号别漏
{
d[k] = c[i]; k++;//直接赋值,不用for循环,利用前面的for循环的余温
}
}
bubblesort(d, k);//函数引用
printf("%d", d[0]);
for(i=1;i<k;i++)
printf(" %d", d[i]);
//不合法语句//system ("pause");
return 0;
}
void bubblesort(int a[], int n)//定义冒泡排序函数,含指针
{
int i, j, h;
for (i = 0; i < n - 1; i++)//使下面的梳理顺序再次执行(最多只需执行n-1次,例如43210,经过5-1=4次梳理,可得01234)
{
for (j = 0; j < n - i - 1; j++)//单次梳理顺序,顺序排列(例如43210,经过1次梳理,可得32104)
{
if (a[j] > a[j + 1])//数值交换
{
h = a[j + 1]; a[j + 1] = a[j]; a[j] = h;
}
}
}
}
定义一个含20个元素的整型数组并初始化为a[20]={1,2,3,4,5,6,7,8,9,10}。另外定义一个大小为10的整型数组b。
要求:输入整数n(1<=n<=10),然后输入n个整数存入b中,再输入一个整数k(1<= k <=10),
将数组b中的n个元素依次插入到数组a中从第k位开始的地方,插入完成后,输出数组a(元素间用空格隔开)。
输入输出格式:
输入:整数n,n个整数,整数k
输出:数组a
样例:
2
11 22
1 2 11 22 3 4 5 6 7 8 9 10
#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
int n,m;
scanf("%d", &n);
int a[20], b[10];
for (size_t i = 0; i < 10; i++)
{
a[i] = i + 1;
}
for (size_t j = 0; j < n; j++)
{
scanf("%d", &b[j]);
}
scanf("%d", &m);
for (size_t i = 0 ; i < n; i++)
{
for ( int j=i+10; j >i+n;j--)
{
a[j] = a[j-1];
}
a[i + m] = b[i];
}
for (size_t i = 0; i < 10+n-1; i++)
{
printf("%d ", a[i]);
}
printf("%d", a[10 + n-1]);
}
A reversible prime in any number system is a prime whose “reverse” in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.
Now given any two positive integers N (< 105) and D (1 < D <= 10), you are supposed to tell if N is a reversible prime with radix D.
Input Specification:
The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.
Output Specification:
For each test case, print in one line “Yes” if N is a reversible prime with radix D, or “No” if not.
#define _CRT_SECURE_NO_WARNINGS
#include
int iPrime(int N)
{
if (N == 0 || N == 1)
return 0;
for (int i = 2; i * i <= N; i++)
if (N % i == 0)
return 0;
return 1;
}
int Rev(int N, int D)
{
int Nrev;
for (Nrev = 0; N; N /= D)
{
Nrev *= D;
Nrev += N % D;
}
return Nrev;
}
int main()
{
int N, D,i=0;
int a[100];
while (1) {
scanf("%d", &N);
if (N<=0)
{
break;
}
scanf("%d", &D);
if (iPrime(N) && iPrime(Rev(N, D))) a[i] = 1;
else a[i] = 0;
i++;
}
for (size_t j = 0; j < i; j++)
{
if (a[j]) printf("Yes\n");
else printf("No\n");
}
return 0;
}