- 猴子吃桃
- 加密电文
- 自由落体
- 亲密数
- 5友捕鱼
- 计算每个行和列元素的总和
- 计算闰年
- 转二进制
- 异或运算实现两个数的交换
- 以年数、周数和天数转换给定天数
- Check if a String is a 回文数
- 汉诺塔
- 判断字符串中的字符是否是大写字母,如果是,那么转换为小写字母。
猴子吃桃问题,猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃一个,以后每天早上都吃了前一天剩下的一半零一个到底10天早上想再吃是,见只剩下一个桃子,求第一天共有多少桃子
方法一:逆向思维
#include#include int main(){ int n; //天数 int i; //桃子数 int a = 1; scanf("%d",&n); for (i=1;i<=n;i++){ a++; a*=2; } printf("%d",a); return 0; }
方法二:递归方法
加密电文自由落体有一类加密电文,按照下图的加密规则翻译成密码,要求实现把此类密码翻译回原文。 例如:密码abc456MNO翻译回原文为zyx543NML
A->Z,B->Y,C->X……M->N Z->A,Y->B……N->M 0->9,1->8,2->7……4->5
9->0,8->1……5->4 a->z,b->y,c->x……m->n z->a,y->b……n->m
亲密数一球从M米高度自由下落,每次落地后返回原高度的一半,在落下, 他在第N次落下时反弹多高?共经过多少米?保留两位小数、
求亲密数 如果一个数A的全部因子之和等于B且B的全部因子等于A 那么这两个数就互称为亲密数。因子:6的y因子为,1,2,3
#include5友捕鱼#include int main(){ int a;//循环对象 int b; //因子和 int i;//因子 int t; printf("3000以内的亲密数:n"); for (a = 1; a <= 3000; a++){ for (b = 0, i = 1; i <= a / 2; i++)//找因子 { if (a%i == 0) { b += i;//整数a的因子之和 } } for (t = 0, i = 1; i <= b / 2; i++){ if(b%i==0){ t += i; } } if (t == a){ printf("%d %dn",a,b); } } return 0; }
计算每个行和列元素的总和一个人先醒,将鱼平分5份,正好多一条,然后扔进河里,拿了一份走了. 又一个人醒,将鱼平分5份,正好多一条,然后扔进河里,拿了一份走了. 类推
问:至少共捕几鱼
#include计算闰年int Addrow(int array1[10][10], int k, int c); int Addcol(int array1[10][10], int k, int r); void main() { int arr[10][10]; int i, j, row, col, rowsum, colsum, sumall=0; printf("Enter the order of the matrix n"); scanf("%d %d", &row, &col); printf("Enter the elements of the matrix n"); for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { scanf("%d", &arr[i][j]); } } printf("Input matrix is n"); for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { printf("%3d", arr[i][j]); } printf("n"); } for (i = 0; i < row; i++) { rowsum = Addrow(arr, i, col); printf("Sum of row %d = %dn", i + 1, rowsum); } for (j = 0; j < col; j++) { colsum = Addcol(arr, j, row); printf("Sum of column %d = %dn", j + 1, colsum); } for (j = 0; j < row; j++) { sumall = sumall + Addrow(arr, j, col); } printf("Sum of all elements of matrix = %dn", sumall); } int Addrow(int array1[10][10], int k, int c) { int rsum = 0, i; for (i = 0; i < c; i++) { rsum = rsum + array1[k][i]; } return(rsum); } int Addcol(int array1[10][10], int k, int r) { int csum = 0, j; for (j = 0; j < r; j++) { csum = csum + array1[j][k]; } return(csum); }
判断任意年份是否为闰年,需要满足以下条件中的任意一个:
① 该年份能被 4 整除同时不能被 100 整除;
② 该年份能被400整除。
#include转二进制void main(){ int x; printf("输入:"); scanf("%d",&x); if(((x%4==0)&&(x%100!=0))||(x%400==0)){ printf("%d 此年是闰年n",x); } else{ printf("%d 此年不是闰年n",x); } main(); }
#define N 100
void main(){
int n,a[N];
int i = 0;
printf("请输入:");
scanf("%d",&n) ;
while(n>0){
a[i] = n % 2;
i++;
n/=2;
}
for(i--;i>=0;i--){
printf("%d",a[i]);
printf("n");
}
}
异或运算实现两个数的交换
采用下面的方法,对于给定两个整数a,b,下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量:
a = a ^ b; b = a ^ b; a = a ^ b;
这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质:
1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0
2.任意一个变量X与0进行异或运算,结果不变,即X^0=X
3.异或运算具有可结合性,即abc=(ab)c=a(bc)
4.异或运算具有可交换性,即ab=ba
分析:
第一步: a = a ^ b;
完成后 a变量的结果为a ^ b
第二步: b = a ^ b;
此时赋值号右边的a保存的是a ^ b的值,那么将赋值号右边的a用a ^ b替换,
得到(a ^ b) ^ b=a ^ (b ^ b)=a ^0=a,
即经过第二步运算后b中的值为a,即b=a,将a换到了b里
第三步: a = a ^ b;
此时赋值号右边的a保存的仍然是a ^ b的值,不变,而赋值号右边的b已经是a 了,
将赋值号右边的a,b分别进行替换,
即此时赋值号右边a ^ b=(a ^ b)^ a=a ^ b^ a=a ^ a^ b=0^ b=b, 该值赋值给a,即a=b
即经过第三步运算后a中的值为b,即a=b,将b换到了a里
这样经过如上的三步骤,完成了交换两个变量a,b而无需借助第3个临时变量过程。
这个过程等价于如下的过程,:
a=a+b
b=a-b;
a=a-b;
前提是a+b的值不能溢出。
#include以年数、周数和天数转换给定天数void main() { long i, k; printf("Enter two integers n"); scanf("%ld %ld", &i, &k); printf("n Before swapping i= %ld and k = %ld", i, k); i = i ^ k; k = i ^ k; i = i ^ k; printf("n After swapping i= %ld and k = %ld", i, k); }
#include#define DAYSINWEEK 7 void main() { int ndays, year, week, days; printf("Enter the number of daysn"); scanf("%d", &ndays); year = ndays / 365; week =(ndays % 365) / DAYSINWEEK; days =(ndays % 365) % DAYSINWEEK; printf ("%d is equivalent to %d years, %d weeks and %d daysn", ndays, year, week, days); }
#includeCheck if a String is a 回文数#include int main() { double m, y, r, i; scanf("%lf %lf %lf",&m,&y,&r); i=m*pow(1+r,y)-m; printf("interest = %.2lfn",i); return 0; }
#includevoid main() { char string[50],re_string[50]; int i,length = 0; int flag = 0; printf("please input a string:"); gets(string); for(i=0;string[i]!=0;i++){ length++; } printf("The length of the string '%s' = %dn", string, length); for(i = length-1;i>=0;i--){ re_string[length-1-i] = string[i]; } for(flag=1,i=0;i 汉诺塔 #include判断字符串中的字符是否是大写字母,如果是,那么转换为小写字母。void move(char x, char y)//把盘子从x柱移到y柱 { static int i = 0;//记录移动的次数 i++; printf("第%d次把盘子从%c柱移到%c柱n", i, x, y); } void Hanoi(int n,char A,char B,char C){ if(n==1){ move(A,C); } else if(n>1){ Hanoi(n-1,A,C,B);//把A柱上n-1个盘子借助C柱移到B柱 move(A, C);//A柱上n-1个盘子移到B上之后将A柱上第n个盘子移到C柱 Hanoi(n - 1, B, A, C);//将B柱上n-1个盘子借助A柱移到C柱 } } void main() { int n =0; printf("input n:n"); scanf("%d", &n); char x = 'a'; char y = 'b'; char z = 'c'; Hanoi(n, x, y, z); return 0; } #includeint main() { char ch; scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')?(ch+32):ch; printf("%cn",ch); return 0; }



