关于算法
来源:互联网 发布:js 执行 dll 编辑:程序博客网 时间:2024/06/03 22:08
1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
//每个村庄卖去所赶鸭子的一半又一只,从后往前推,前一个村庄的鸭子数就是后一个村庄的鸭子数+1再乘以2#include<stdio.h>int main(){int i=2; //路过第七个村庄时的数量int count;for(int j=6;j>0;j--){i=2*(i+1); //路过上一个村庄时的数量count=i/2+1; //卖出的鸭子printf("路过第%d个村庄时,有%d只鸭子,卖出了%d只鸭子\n",j,i,count);}return 0;}
2.角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
如:输入22,
输出 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
STEP=15
#include<stdio.h>int main(){int i;//输入的数字int count=0; //计算运算次数scanf("%d",&i);do{if(i%2==0) //如果是偶数,除以二{i=i/2;printf("%d ",i);}else //如果是奇数,乘以3加1{i=i*3+1;printf("%d ",i);}count++; //计数}while(i!=1);printf("\n共运算%d次\n",count);return 0;}
3.电话号码对应的字符组合:在电话或者手机上,一个数字如2对应着字母ABC,7对应着PQRS。那么数字串27所对应的字符的可能组合就有3*4=12种(如AP,BR等)。现在输入一个3到11位长的电话号码,请打印出这个电话号码所对应的字符的所有可能组合和组合数。
#include <stdio.h>#include <string.h>#include <stdlib.h>char mapping[10][5] = { //建立数组,每个数字对应的字母"....","....","ABC.","DEF.","GHI.","JKL.","MNO.","PQRS","TUV.","WXYZ",};char s[16];char t[16];char r[16];char c;int i,d,L,m,j,n,k;void main(int argc,char **argv) { if (argc>=2) { d=atoi(argv[1]); } else { scanf("%d",&d); } sprintf(s,"%d",d); L=strlen(s); k=0; for (i=0;i<L;i++) { if ('0'!=s[i]&&'1'!=s[i]) t[k++]=s[i]; } t[k]=0; strcpy(s,t); L=strlen(s); if (0==L) return; m=1; for (i=0;i<L;i++) m=m*4; n=0; for (i=0;i<m;i++) { sprintf(r,"%0*s",L,ltoa(i,t,4)); strcpy(t,r); for (j=0;j<L;j++) { r[j]=mapping[s[j]-'0'][t[j]-'0']; } k=0; for (j=0;j<L;j++) { if ('.'!=r[j]) t[k++]=r[j]; } t[k]=0; if (L==(signed)strlen(t)) { printf("%d %s\n",++n,t); } }}
4.日本著名数学游戏专家中村义作教授提出这样一个问题:父亲将2520个桔子分给六个儿子。分完 后父亲说:“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子?
#include<math.h>#include <iostream>using namespace std;void main() { int b1,b2,b3,b4,b5,b6; for( b1=8;b1<2520;b1=b1+8) //老大原有的桔子数可以整除8 { for(b2=1;b2<2520-b1;b2++) { int lao2=(b1/8+b2); //lao2是老二原有的加上老大的1/8 if((2520/6==lao2*6/7)&&(0==lao2%7)) //老二现在的可以整除7且给了老三后剩余的桔子数是420 for(b3=1;b3<2520-b1-b2;b3++) { int lao3=lao2/7+b3; if((2520/6==lao3*5/6)&&(0==lao3%6)) for (b4=1;b4<2520-b1-b2-b3;b4++) { int lao4=lao3/6+b4; if ((2520/6==lao4*4/5)&&(0==lao4%5)) for(b5=1;b5<2520-b1-b2-b3-b4;b5++) { int lao5=lao4/5+b5; if ((2520/6==lao5*3/4)&&(0==lao5%4)) { b6=2520-b1-b2-b3-b4-b5; int lao6=lao5/4+b6; if((2520/6==lao6*2/3) &&(0==lao6%3)) if (2520/6==(b1*7/8+lao6/3)) { cout<<"***分2520个橘子***"<<endl; cout<<"老大:"<<b1<<endl; cout<<"老二:"<<b2<<endl; cout<<"老三:"<<b3<<endl; cout<<"老四:"<<b4<<endl; cout<<"老五:"<<b5<<endl; cout<<"老六:"<<b6<<endl; cout<<"******************"<<endl; } } } } } } } system("pause"); }
总结:
前两道题比较简单,对于第三题,我知道是要建立一个二维表,可能性一一列举,但是却不会用递归,参考了网上的,第四题用了嵌套的循环,办法比较笨,还要继续优化改进。
阅读全文
0 0
- 关于算法.
- 关于算法
- 关于算法
- 关于算法
- 关于算法
- 关于算法
- 关于算法
- 关于算法
- 关于算法
- 关于算法
- 关于算法1--排序算法
- 关于3DES算法
- 关于A算法
- 关于贪心算法!
- 关于迷宫的算法
- 关于3DES算法
- 关于STL算法
- 关于排序算法
- linux 系统调用sysconf【总结】
- PAT乙级《组个最小数》
- Effective C++ 关于析构函数
- HashMap的尾部遍历问题--Tail Traversing
- github的命令行使用
- 关于算法
- Shell脚本基础8-逻辑与
- 【kotlin从入门到深坑】系列目录
- inception 自动化sql审核
- C语言模拟实现多态
- Together项目后台开发04
- NDK探究之旅《八》——jni的开发流程规范
- POJ3046-Ant Counting
- 牛客网编程小结(三)——long long