int i= 1, p = 0; for (i = 1; i <= 2000; i++) { int sum = i + 100; p = sqrt(sum); if (p * p == sum) { sum += 168; p = sqrt(sum); if (p * p == sum) { printf("%d\n",i); } } }
99乘法表
voidninenine() { int i; for ( i = 0; i < 9; i++) { int j; for (j =1; j <=i; j++) printf("%d*%d=%2d\t",i,j,i*j); printf("\n"); } }
判断1000年---2000年之间的闰年
int checkThousand() { int year; for ( year = 1000; year <=2000 ; year++) if ((year%4==0&&year%100!=0)||(year%400==0)) printf("%d\t",year); }
两个值的内容进行交换。
int change() { int a = 10,b = 20; int temp = a; a = b; b = temp; printf("a=%d,b=%d",a,b); return 0; } /*a1 = 0x01; //0000 0001 a2 = 0x00; //0000 0000 a3 = 0x03; //0000 0011 a4 = 0x02; //0000 0010 b1 = a1 ^ a2; //0000 0001 b2 = a1 ^ a3; //0000 0010 b3 = a1 ^ a4; //0000 0011 */ int change2() { int a = 10; int b = 20; //^位异或 a = a ^ b; b = a ^ b; a = a ^ b; printf("a=%d,b=%d",a,b); return 0; }
求10个整数中最大值
int max() { int arr[10] = { 0,1,23,21,20,88,29,3 };int i, max = arr[0]; for ( i = 0; i <10; i++) if (arr[i]>max) max = arr[i]; printf("max=%d\n",max); return 0; }
将三个数按从大到小输出
int arraythree() { int a, b, c, temp; printf("please enter values:"); scanf_s("%d %d %d",&a,&b,&c); if (a<b) {exchange(a, b); if (a<c) {exchange(a, c); if (b<c) exchange(b, c); printf("the order is:%d,%d,%d\n",a,b,c); return 0; } int exchange(int *x,int *y) { int temp = x; x = y; y = temp; return 0; }
求两个数的最大公约数
1.辗转相除法 void maxPublic() { int a, b; printf_s("please enter values:"); scanf_s("%d %d",&a,&b); while (a%b) { int temp = a % b; a = b; b = temp; } printf_s("the max common divisor is %d\n",b); } 2.短除法 int a, b; printf("input a,b(a>b):"); scanf("%d %d",&a,&b); if (a < b) { int t = a; a = b; b = t; } int k = b; for (; k >=1; k--) { if (a % k == 0 && b % k == 0)break; } printf("最大公约数:%d,最小公倍数:%d",a*b/k,k); 3.递归 int dig(int a,int b) { if (b == 0)return a; while (b) { return dig(b,a%b); } } int main() { int a, b; printf("input a,b(a>b):"); scanf("%d %d",&a,&b); if (a < b) { int t = a; a = b; b = t; } printf("最大公约数:%d,最小公倍数:%d",(a*b)/ dig(a, b),dig(a, b)); return 0; }
计算Fibonacci数列(斐波那契)
// 1 1 2 3 5 ................ 数列40个数 //递归 int fn(int n) { if (n < 3)return 1; else return fn(n - 1) + fn(n - 2); } void fns() { int i; for (i = 1; i <= 40; i++) { printf("%12d", fn(i)); if (i % 5 == 0)printf("\n"); } } //2.迭代 int f1 = 1, f2 = 1; int i; for (int i = 1; i <= 20; i++) { //结束条件 printf("%12d %12d", f1, f2); if (i % 2 == 0) printf("\n"); //if语句作用是使输出4个数后换行 f1 = f1 + f2; f2 = f2 + f1; } //3.数组 int i; int f[20] = { 1,1 }; for (i = 2; i < 40; i++) { f[i] = f[i - 2] + f[i - 1]; } for (i = 0; i < 40;i++) { if (i % 5 == 0)printf("\n"); printf("%12d", f[i]); } double f[50]; f[1] = 1; f[2] = 1; for (int i = 3; i <= 49; i++) { f[i] = f[i - 1] + f[i - 2]; } for (int i = 1; i < 50; i++) { printf("%.lf\n",f[i]); }
回文检查
int checkClicy() { int n, reverse = 0, rem, temp; printf("Enter an interger"); scanf_s("%d",&n); temp = n; while (temp!=0) { rem = temp % 10; reverse = reverse * 10 + rem; temp /= 10; } if (reverse==n) { printf("%d is a palindrome.",n); } else { printf("%d is not a palindrome.",n); } return 0; }
检查一个数能不能表示成两个质数之和
int prime(int n) { int i, flag = 1; if (n == 1)flag = 0; for (i = 2; i < n; i++) //或者 i<=sqrt(n) { if (n % i == 0) { flag = 0; break; } } return flag; } //检查一个数能不能表示成两个质数之和 void checksum() { int n, i, flag = 0; printf_s("Enter a positive integer:"); scanf_s("%d",&n); for ( i = 2; i < n/2; i++) { if (prime(i)!=0) { if (prime(n-i)!=0) { printf("%d=%d+%d\n",n,i,n-i); flag = 1; } } } if (flag==0) { printf("%d cant't be sum of two prime numbers.",n); } }
打印金字塔和三角形
void triangle() { int i, j, rows; printf(" Enter the number of rows:"); scanf_s("%d", &rows); for (i = 1; i <= rows; i++) { for (j = 1; j <= i; j++) { printf("*"); } printf("\n"); } } //倒金字塔三角形 void invertedTriangle() { int i, j, rows; printf_s("Enter the number of rows:"); scanf_s("%d",&rows); for (i =rows; i>=1; i--) { for (j =1; j<=i ; j++) { printf("*"); } printf("\n"); } } //用 * 打印金字塔 void trigon() { int i, space, rows, k = 0; printf_s("Enter the number of rows:"); scanf_s("%d",&rows); for ( i = 1; i <=rows ; ++i) { for (space = 1; space <= rows-i;space++) { printf(" "); } while (k!=2*i-1) { printf("*"); k++; } k = 0; printf("\n"); } } //用 * 打印倒金字塔 void delta() { int rows, i, j, space; printf("Enter number of rows:"); scanf_s("%d",&rows); for ( i =rows; i>=1;i--) { for (space=0;space<=rows-i;space++) { printf(" "); } for (j = i; j <= 2 * i - 1; ++j) { printf("*"); } for (j = 0; j <i-1; j++) { printf("*"); } printf("\n"); }
简单的加减乘除计算器
void counter() { char o; float num1, num2; printf_s("Enter operator either + or - or * or divide:"); scanf_s("%c", &o); printf_s("Enter two operands:"); scanf_s("%f%f", &num1, &num2); switch (o) { case '+': printf("%.1f+%.1f=%.1f",num1,num2,num1+num2); break; case '-': printf("%.1f-%.1f=%.1f", num1, num2, num1 - num2); break; case '*': printf("%.1f*%.1f=%.1f", num1, num2, num1 * num2); break; case '/': printf("%.1f/%.1f=%.1f", num1, num2, num1 / num2); break; default: printf("Error! operator is not correct"); break; } }
颠倒字符串(递归)
void Reverse() { char c; scanf_s("%c", &c); if (c != '\n') { Reverse(); printf_s("%c",c); } } int main() { printf_s("Enter a sentence:"); Reverse(); return 0; }
实现二进制与十进制之间的相互转换
int decimal_binary(int n) { int rem, i = 1, binary = 0; while (n!=0) { rem = n % 2; n / 2; binary += rem * i; i *= 10; } return binary; } int binary_deciaml(int n) { int decimal = 0, i = 0, rem; while (n!=0) { rem = n % 10; n / 10; decimal += rem * pow(2, i); ++i; } return decimal; }
使用多维数组实现两个矩阵的相加
int TwoRectangleAdd() { int r, c, a[100][100], b[100][100], sum[100][100], i, j; printf("Enter number of rows(between 1 and 100):"); scanf_s("%d",&c); printf("\n Enter elements of lst martix:\n"); for ( i = 0; i < r; i++) { for (j == 0; j < c;j++) { printf("Enter element a%d%d",i+1,j+1); scanf_s("%d",&a[i][j]); } } printf("Enter elements of 2nd matrix:\n"); for ( i = 0; i < r; i++) { for (j = 0; j < c; j++) { printf("Enter element a%d%d",i+1,j+1); scanf_s("%d",&b[i][j]); } } /*Adding Two matrices*/ for ( i = 0; i < r; i++) { for (j = 0; j < c; j++) { sum[i][j] = a[i][j] + b[i][j]; } } /*Displaying th resultant sum matrix.*/ printf("\nSum of two matrix is:\n\n"); for ( i = 0; i < r; i++) { for ( j = 0; j < c; j++) { printf("%d",sum[i][j]); if (j==c-1) { printf("\n\n"); } } } }
数组[N]排序
#define N 10 int main() { int a[N], i,j,t; for (i = 0; i < N; i++) scanf("%d",&a[i]); for (i = 0; i < N-1; i++) { for (j =i+1; j < N; j++) { if (a[i] > a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } } } /*冒泡排序 for (i = 0; i < N; i++) { for (j =0; j < N-1-i; j++) { if (a[j] > a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } */ for (i = 0; i < N; i++)printf("%d\t",a[i]); return 0; }
输入一行小写字母后,将字母变成其下一字母(a->b,b->c,y->a)
(a变成b、b变成c、c变成d、…、x变成y、y变成z、z变成a)输出。 //第一种 char s[100]; int i; printf("input a string:"); for (i = 0; (s[i]=getchar())!= '\n'; i++) { s[i] = s[i] == 'z' ? 'a' : ++s[i]; } s[i] = '\0'; puts(s); //第二种 char s[100]; int i; printf("input a string:"); gets(s); for (i = 0;s[i]; i++) { s[i] = s[i] == 'z' ? 'a' : ++s[i]; } s[i] = '\0'; puts(s);
完数( 一个数恰好等于它的真因子之和 )
真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身 6 its factor are1 ,2 ,3 28 its factor are1 ,2 ,4 ,7 ,14 496 its factor are1 ,2 ,4 ,8 ,16 ,31 ,62 ,124 ,248 int sum, i, j; for (i = 2; i < 1000; i++) { sum = 0; for (j = 1; j <=i/2; j++) { if (i % j == 0)sum += j; } if (sum == i) { printf("%d its factor are",i); for (j = 1; j <= i / 2; j++) { if (i % j == 0 && j != 1) { printf(","); } if (i % j == 0) { printf("%d ", j); } } printf("\n"); } }
水仙花数
int digit, k, m, s; for (k = 1; k <= 1000; k++) { s = 0; m = k; while (m != 0) { digit = m % 10; s += digit * digit * digit; m /= 10; } if (s == k) { printf("%d\n", s); } } int i, g, s, b; for (i = 1; i <1000; i++) { g = i % 10; s = i / 10 % 10; b = i / 100; if (i == (g * g * g + s * s * s + b * b * b)) { printf("%d\n",i); } }
2568 sum=2+5+6+8
int n; scanf("%d", &n); int a[10], j = 0, sum = 0; while (n) { a[j] = n % 10; sum += a[j]; n /= 10; j++; } printf("%d=", sum); for (j--; j >= 0; j--) { printf("%d", a[j]); if (j != 0)printf("+"); }
回文字符串
char str[50], * p = str; int i = 0, j; gets(str); while (*p++)i++; for (j = 0; j < i; j++, i--) if (str[j] != str[i - 1]) break; if (i == j || j - i == 1) printf("%s是回文字符串\n", str); else printf("%s不是回文字符串\n", str); //2种 char s[256]; gets(s); int i, j, flag =1; for (i = 0, j = strlen(j) - 1; i < j; i++, j--) { if (s[i] != s[j]) { flag =0; break; } } if (flag)printf("%s是回文字符串\n", s); else printf("%s不是回文字符串\n", s);
若干字符串,从大到小排序
int n,i,j; char* str[4] = { "adsadsa","weqw","gfg","czxcc" }; for (i = 0; i <3; i++) { for (j = i + 1; j < 4; j++) { if (strcmp(str[i], str[j]) < 0) { char* temp = str[i]; str[i] = str[j]; str[j] = temp; } } } for (i = 0; i < 4; i++)puts(str[i]);
一个长度N的字符串从K个字符起,删去M个字符,组成长度N-M(N,M<=80,k<=N)
//We are poor students->We are students void removeStr(char* str, int k, int m) { char* s = str; while (m) { s[k] = 0; k++, m--; } strcat(str, &s[k]); }
写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换。
#include<stdio.h> void PrintArray(int ar[3][3]) { for(int i=0; i<3; ++i) { for(int j=0; j<3; ++j) { printf("%d ", ar[i][j]); } printf("\n"); } } void ReverseArray(int ar[3][3]) { int tmp; for(int i=0; i<3; ++i) { for(int j=0; j<i; ++j) { if(i != j) //中间数不发生变化 { //交换两个数 tmp = ar[i][j]; ar[i][j] = ar[j][i]; ar[j][i] = tmp; } } } } int main() { int array[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; printf("转置前:\n"); PrintArray(array); //进行数组转置 ReverseArray(array); printf("转置后:\n"); PrintArray(array); return 0; }
如输人1990,应输出“1 9 9 0”。
//写一个函数,输人一个4位数字, 要求输出这4个数字字符,但每两个数字间空一个空格。 void OutString(char str[]) { int i = 0; while (str[i] != '\0') { printf("%c", str[i]); if (str[i + 1] == '\0') //清除最后一个空格不输出 break; putchar(' '); i++; } printf("\n"); }
写一个函数,输人一行字符,将此字符串中最长的单词输出。
void LongestWord(char str[], char word[]) { int max_len = 0; int len = 0; int i = 0; while (str[i] != '\0') { if (str[i] == ' ') { str[i] = '\0'; len = strlen(str); if (len > max_len) { max_len = len; strcpy(word, str); str = str + len + 1; } } i++; } }
起泡法(冒泡排序)
#include<stdio.h> #include<string.h> void BubbleSort(char str[]) { int i, j; char tmp; int len = strlen(str); for(i=0; i<len-1; ++i) { for(j=0; j<len-i-1; ++j) { if(str[j] > str[j+1]) { tmp = str[j];str[j] = str[j+1]; str[j+1] = tmp; } } } } int main() { int i; char str[11] = {0}; printf("请输入10个字符:>"); for(i=0; i<10; ++i) scanf("%c", &str[i]); BubbleSort(str); printf("string sorted: %s\n", str); return 0; }
二分查找 (折半查找法)
①输人10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输人一个职工号,用折半查找法找出该职工的姓名,从主函数输人要查找的职工号,输出该职工姓名。 #include<stdio.h> #define N 10 void input(int num[], char name[N][8]) { int i; for (i = 0; i < N; i++) { printf("input NO.: "); scanf("%d", &num[i]); printf("input name: "); getchar(); gets(name[i]); } } void sort(int num[], char name[N][8]) { int i, j, min, templ; char temp2[8]; for (i = 0; i < N - 1; i++) { min = i; for (j = i; j<N; j++) if (num[min]>num[j]) min = j; templ = num[i]; strcpy(temp2, name[i]); num[i] = num[min]; strcpy(name[i], name[min]); num[min] = templ; strcpy(name[min], temp2); } printf("\n result:\n"); for (i = 0; i < N; i++) printf("\n %5d%10s", num[i], name[i]); } void search(int n, int num[], char name[N][8]) { int top, bott, mid, loca, sign; top = 0; bott = N - 1; loca = 0; sign = 1; if ((n<num[0]) || (n>num[N - 1])) loca = -1; while ((sign == 1) && (top <= bott)) { mid = (bott + top) / 2; if (n == num[mid]) { loca = mid; printf("NO. %d , his name is %s.\n", n, name[loca]); sign = -1; } else if (n < num[mid]) bott = mid - 1; else top = mid + 1; } if (sign == 1 || loca == -1) printf("%d not been found.\n", n); } int main() { int num[N], number, flag = 1, c; char name[N][8]; input(num, name); sort(num, name); while (flag == 1) { printf("\ninput number to look for:"); scanf("%d", &number); search(number, num, name); printf("continue ot not(Y/N)?"); getchar(); c = getchar(); if (c == 'N' || c == 'n') flag = 0; } return 0; }
写一个函数,输人一个十六进制数,输出相应的十进制数。
#include<stdio.h> size_t HextoDec(char s[]) { size_t i, n; n = 0; for (i = 0; s[i] != '\0'; i++) { if (s[i] >= '0'&& s[i] <= '9') n = n * 16 + s[i] - '0'; if (s[i] >= 'a' && s[i] <= 'f') n = n * 16 + s[i] - 'a' + 10; if (s[i] >= 'A' && s[i] <= 'F') n = n * 16 + s[i] - 'A' + 10; } return n; } int main() { size_t result = 0; char hex[9] = {0}; printf("input a HEX number:"); scanf("%s", hex); result = HextoDec(hex); printf("0x%s = %u\n", hex, result); return 0; }
用递归法将一个整数n转换成字符串。例如,输人483,应输出字符串”483”。n的位数不确定,可以是任意位数的整数。
#include<stdio.h> void Convert(int n) { int i; if ((i = n / 10) != 0) Convert(i); putchar(n % 10 + '0'); } int main() { int number; printf("input an integer: "); scanf("%d", &number); printf("output: "); if (number < 0) { putchar('-'); //先输出一个负号'-' number = -number; } Convert(number); printf("\n"); return 0; }
给出年、月、日,计算该日是该年的第几天。
#include <stdio.h> #include<stdio.h> /* 函数sum_day:计算日期 */ int sum_day(int month, int day) { int day_tab[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int i; for (i = 1; i < month; i++) day += day_tab[i]; /* 累加所在月之前天数 */ return day; } /* 函数leap:判断是否为闰年 */ int leap(int year) { int leap; leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0; return leap; } int main() { int year, month, day, days; printf("input date(year,month,day):"); scanf("%d %d %d", &year, &month, &day); printf("%d/%d/%d ", year, month, day); days = sum_day(month, day); /* 调用函数sum_day */ if (leap(year) && month >= 3) /* 调用函数leap */ days = days + 1; printf("is the %dth day in this year.\n", days); return 0; }
1234->9876,四位数+5,再%10,交换(1-3,2-4)
int a[10],n,m,count=0; scanf("%d", &n); while (n) { m = n % 10 + 5; a[count++] = m % 10; n /= 10; } for(int i=0; i< count; i++) { printf("%d",a[i]); } //2.种 int a, i, aa[4], t; scanf("%d", &a); aa[0] = a % 10; aa[1] = a/10%10; aa[2] = a/100%10; aa[3] = a/1000; for (i = 0; i <= 3; i++) { aa[i] += 5; aa[i] %= 10; } for (i = 0; i <= 3/2; i++) { t = aa[i]; aa[i] = aa[3 - i]; aa[3 - i] = t; } for (i = 3; i >= 0; i--)printf("%d", aa[i]);
252=2×5×2, 202=2×0×2
long int num, k=1; printf("please enter a number:\n"); scanf("%ld", &num); while (num) { k *= num % 10; num /= 10; }; printf("\n%ld\n", k);
99=3×3×11(因式分解)
int n, i; printf("请输入整数:"); scanf("%d", &n); printf("%d=", n); for (i = 2; i <= n; i++) { while (n % i == 0) { printf("%d", i); n /= i; if (n != 1)printf("*"); } } //2种 int a[20], count = 0,n; scanf("%d", &n); printf("%d=", n); for (int i = 2; i <= n; i++) { while (n % i == 0) { a[count++] = i; n = n / i; } } for (int i=0; i<count; i++) { printf("%d", a[i]); if (i!=count-1)printf("*"); }
10-16进制 ,16进制转10进制
#include<stdio.h> int main() { int n,i=0,j; char a[100]; scanf("%d",&n); if(n==0)printf("%d",n); else { while(n!=0) { switch(n%16) { case 0:a[i]='0';break; case 1:a[i]='1';break; case 2:a[i]='2';break; case 3:a[i]='3';break; case 4:a[i]='4';break; case 5:a[i]='5';break; case 6:a[i]='6';break; case 7:a[i]='7';break; case 8:a[i]='8';break; case 9:a[i]='9';break; case 10:a[i]='A';break; case 11:a[i]='B';break; case 12:a[i]='C';break; case 13:a[i]='D';break; case 14:a[i]='E';break; case 15:a[i]='F';break; } n=n/16; i++; } for(j=i-1;j>=0;j--)printf("%c",a[j]); } return 0; } #include<stdio.h> #include<string.h> #include<math.h> int main() { char a[100]; int i; long long n=0; scanf("%s",&a); for (i=0;a[i]!='\0';i++) { if(a[i]>='A' && a[i]<='F') a[i]=(a[i]-'A')+10+'0'; n+=((a[i]-'0')*(pow(16,strlen(a)-1-i))); } printf("%lld",n); return 0; }
获取字符串数组里,最长的一串字符串
char* ff(char p[][10], int n) { static char t[20]; int i, max = 0; for (i = 0; i < n; i++) { if (strlen(p[i]) > max) { max = strlen(p[i]); strcpy(t, p[i]); } } return t; } int main() { char p[][10] = { "abc","aavsd","avvd","cd","asdasdasd"}; printf("%s", ff(p, 5)); return 0; }
1234567890,每个数字和
long fs(long n) { if (n != 0) return (n % 10 + fs(n / 10)); else return 0; }
插入排序
//插入排序,从大到小 int main(){ int a[10] = { 99,32,11,22,8,9,4,6,-22,5 }; int i,j; for (i = 1; i < 10; i++) { for (j = i; i >0; j--) { if (a[j]>a[j - 1]) swaps(&a[j],&a[j-1]); else break; } } for (i = 0; i < 10; i++) { printf("%d\t", a[i]); } return 0; } //2种 int a[10] = { 99,32,11,22,8,9,4,6,-22,5 }; int i,j; for (i =0; i <9; i++) { for (j =i+1; i<10; j++) { if (a[i]<a[j]) swaps(&a[i],&a[j]); else break; } } for (i = 0; i < 10; i++) { printf("%d\t", a[i]); }
冒泡排序
int i, j, c = 0, a[10] = {12,44,66,-23,44,55,66,212,-99,88}; for (i = 0; i <10; i++) { for (j = 0; j < 9 - i; j++) { if (a[j]>a[j + 1]) { swaps(&a[j], &a[j + 1]); c = 1; } } if (c==0)break; } for (i = 0; i < 10; i++)printf("%d\t", a[i]);
C语言 在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。
在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。 已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。 假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声 //计算重复的炮声 int cf(int n,int m,int m2) { //n=n*m,m=5; int i,j,count=0; for (i = m; i<= n * m; i +=m) { for (j = m2; j <= n* m2; j += m2) { if (i == j) { count++; } } } return count; } int main() { int sum = 21 * 3; //炮声:56重复,57重复,67重复 sum -= cf(21, 5, 6) + cf(21, 5, 7) + cf(21, 6, 7); printf("%d",sum); return 0; }
'A',4-->BCDE(26个字母循首尾相连了)
void fun(char c, int d) { int i; char A[26], a[26], * ptr; for (i = 0; i < 26; i++) { A[i] = 'A' + i; a[i] = 'a' + i; } if (c >= 'a' && c <= 'z') ptr = a; else ptr = A; //重点是这里,字符-字符第一个,算出差 for (i =1; i <= d; i++) { printf("%c",ptr[(c-ptr[0]+i)%26]); } }
1+x+x^2/2! +x^3/3! +x^4/4!+......
double funS(double x, int n) { double f = 1, t=1; int i; for (i = 0; i < n; i++) { t *= x /(i + 1); f += t; } return f; }
1234 ->4123->3412->2341
4123 3412 2341 1234 #define S 4 void fs(int *a) { int i, j, k, m; printf("input 4 number:"); for (i = 0; i < S; i++)scanf("%d",a+i); printf("the result:\n"); for (i = S; i >0; i--) { k = a[S - 1];//截取最后一位 for (j = S - 1; j > 0; j--) { a[j] = a[j - 1]; } a[0] = k;//最后一位放到第一位 for (m = 0; m < S; m++)printf("%d", a[m]); printf("\n"); } }
123987-->1397
int n = 123987; int t,s=1,m=0; while (n) { if(n%2){ t = n % 10; m+= t* s; s = s * 10; } n /= 10; } printf("%d", m);
123987--->789321
int n = 123987; int t,s=0; while (n) { t = n % 10; s = s * 10 + t; n /= 10; } printf("%d", s);
abcdabssswwabdd 最后子串ab -- 99,替换 返回abcdabsssww99dd
void kk(char* s, char* t1, char* t2, char* w) { char* p, * r, * a = s; strcpy(w, s); //找到最后ab的位置 while (*w) { p = w, r = t1; while (*r) { if (*r == *p) r++, p++; else break; if (*r == '\0')a = w; } w++; } //99->ab r= t2; while (*r) { *a = *r; a++, r++; } } int main() { char s[100] = { 0 }, t1[100] = { 0 }, t2[100] = {0}, w[100]; gets(s); gets(t1); gets(t2); if (strlen(t1)==strlen(t2)) { kk(s,t1,t2,w); puts(w); } else printf("strlen(t1)!=strlen(t2)\n"); return 0; }
计算字符串里的单词,空格为分隔符
char string[81]; int i, num = 0, word = 0; char c; gets(string); for (i = 0; (c = string[i])!='\0'; i++) if (c ==' ') word = 0; else if (word == 0) { word = 1; num++; } printf("There are % d words in this line\n", num);
幻方,魔法阵
int funL(int(*a)[N]) { int i, j, m1, m2, row, colum; m1 = m2 = 0; for (i = 0; i < N; i++) { j = N - i - 1; m1 += a[i][i]; m2 += a[i][j]; } if (m1 != m2)return 0; for (i = 0; i < N; i++) { row = colum = 0; for (j = 0; j < N; j++) { row += a[i][j]; colum += a[j][i]; } if ((row != colum) || (row != m1))return 0; } return 1; } int main(){ int x[N][N], i, j; for (i = 0; i < N; i++) for (j = 0; j < N; j++) scanf("%d", &x[i][j]); printf("\nArray:\n"); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) printf("%d", x[i][j]); printf("\n"); } if (funL(x))printf("the Array is a magic square\n"); else printf("not"); return 0; }
1 4 2 3 9 6 5 8 7-->9 1 8 2 7 3 6 4 5
//最大,最小,次大,次小 void funM(int a[]) { int i, j, max, min, px, pn, t; for (i = 0; i < 9 - 1; i += 2) { max = min = a[i]; px = pn = i; for (j = i + 1; j < 9; j++) { if (max < a[j]) { max = a[j]; px = j; } if (min > a[j]) { min = a[j]; pn = j; } } if (px != i) { t = a[i]; a[i] = max; a[px] = t; if (pn == i)pn = px; } if (pn!=i+1) { t = a[i+1]; a[i+1] = min; a[pn] = t; } } }
ABCDE -->EDCBAABCDE
void funB(char* s, char* t) { int i, s1; s1 = strlen(s); for (i = 0; i < s1; i++) { t[i] = s[s1 - i-1]; } for (i = 0; i < s1; i++) { t[s1+i] = s[i]; } t[2 * s1] = '\0'; } int main(){ char s[100], t[100]; gets(s); funB(s, t); puts(t); return 0; } //指针法 void funB(char* s, char* t) { while (*s)s++; s--; for (int i = 0; i <strlen(s); i++, t++, s--) { *t = *s; } s++; while (*t++ = *s++); }
ababsdaabdwq中ab的个数:3
int opq(char* s, char* t) { char* p, * r; int n = 0; while (*s) { p = s, r = t; while (*r) { if (*p == *r) { p++, r++; } else break; } if (*r =='\0')n++; s++; } return n; }
字符串转数字(包含负数)
long fnhh(char* p) { int i,flag, len = strlen(p); flag = 1, i = 0; long x = 0; if (*p == '-') { p++; i++; flag = -1; }else if (*p == '+') { p++; i++; } for (; i < len; i++, p++) { x = x * 10 + *p - '0'; } x*=flag; return x; }
一个字符串末尾,超过n个,就除去多余的
void funuu(char* a, int n) { int i=0, k = 0; char* p, * t; p = t = a; while (*t)t++; t--; while (*t == '*') { k++; t--; } //*的个数>n的话就删除掉超过n的* if (k > n) { while (*p && p < t + n + 1) { a[i] = *p; i++; p++; } a[i] = '\0'; } }
abcde 指定删除下标3 -->abce
void jj(char a[], int n) { int i, k = 0; char* b = a; for (i = 0; a[i]!='\0'; i++) { if (i != n)b[k++] = a[i]; } b[k] = '\0'; }
插入一个数,按原先的排序输出
int a[11] = { 0 }; int i, j, temp; printf("请输入10个整数:\n"); for (i = 0; i < 10; i++) scanf("%d", &a[i]); for (i = 0; i < 9; i++) { for (j = 0; j < 9 - i; j++) { if (a[j]<a[j + 1]) { temp = a[j], a[j] = a[j + 1], a[j + 1] = temp; } } } printf("\ninput anumber:"); scanf("%d",&temp); for (i = 0; i < 10; i++) { if (temp > a[i]) { break; } } //往后移 for(j = 9; j >=i; j--) { a[j + 1] = a[j]; } a[i] = temp; printf("\n插入后从大到小排序后:\n"); for (i = 0; i < 11; i++) printf("%d\t",a[i]);
从大到小,双向插入排序
int i, j, k, t; int a[] = { 40,23,45,66,21,440 }; int len = sizeof(a) / sizeof(a[0]); int flag; for (k = 0; k < len / 2; k++) { flag = 0; for (i = 0; i <= k; i++) { for (j = i; j > 0 && a[j] < a[j + 1]; j++) { flag = 1; t = a[j], a[j] = a[j + 1], a[j + 1] = t; } } for (i = len; i > k; i--) { for (j = i; j<len && a[j]>a[j - 1]; j++) { flag = 1; t = a[j], a[j] = a[j-1], a[j-1] = t; } } if (flag == 0)break; } for (i = 0; i < len; i++) printf("%d\t", a[i]);c
对半查找
char a[12] = "adfgikmnprs", c; puts(a); int i, left=0, right=11, mid; printf("input a character:\n"); scanf("%c", &c); while (left <=right) { mid = (left + right) / 2; if (c == a[mid]) { printf("the position is :%d\n", mid + 1); break; }else if (c > a[mid]) left = mid + 1; else right = mid - 1; } if (left > right)printf("不在a字符串里\n");
输入若干个数,统计0-4,统计统同一的整数个数
int a[50], c[5] = {0}, i, n = 0, x; printf("enter 1-4,to end with -1\n"); scanf("%d", &x); while (x != -1) { if (x >= 0 && x <= 4) { a[n++] = x; scanf("%d", &x); }else scanf("%d", &x); } for (i = 0; i < n; i++) { c[a[i]]++; } printf("the result is:\n"); for (i = 0; i <5; i++) { printf("%d:%d\n", i, c[i]); }
两个数组(a,b)分别依次把小的数加入第三个数组里(c)
int a[8] = { 3,6,7,9,11,14,18,20 }; int b[5] = { 1,2,13,15,17 }; int c[13]; int i = 0, j = 0, k = 0; while (i < 8 && j < 5) { if (a[i] < b[j])c[k++] = a[i++]; else c[k++] = b[j++]; } while (i < 8) c[k++] = a[i++]; while (j< 5) c[k++] = a[j++]; for (i = 0; i < 13; i++) printf("%d\t", c[i]);