算法开胃小菜

归志宁无五亩园,读书本意在元元。这篇文章主要讲述算法开胃小菜相关的知识,希望能为你提供帮助。
开胃小菜 简单查找 害死人不偿命的3n+1

#include< stdio.h> #include< iostream> using namespace std; int i=0; int Callatz(int x) if(x==1)else if(x%2==0) Callatz(x/2); i++; else Callatz((3*x+1)/2); i++; return i; int main() int x; cin > > x; cout < < Callatz(x); return 0;

挖掘机技术哪家强?
6 3 65 2 80 1 100 2 70 3 40 3 0

输出样例:
2 150

#include < stdio.h> #include< iostream> using namespace std; //初始化 int school[100000]=0; int main() int n,id,score; //输入参赛人数 cin > > n; //相同的id学校成绩相加 for(int i=1; i< =n; i++) cin > > id > > score; school[id]+=score; //遍历出最大成绩 //注意max 的初始化不要设置为0 int k=-1,max=-1; for(int i=1; i< =n; i++) if(school[i]> max) max=school[i]; k=i; cout < < k< < " "< < max; return 0;

图形输出输入在一行中给出正方形边长N(3< =N< =20)和组成正方形边的某种字符C,间隔一个空格。
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
10 a

aaaaaaaaaa aa aa aa aaaaaaaaaa

#include < stdio.h> #include< iostream> using namespace std; int main() //定义参数 行列 int row,col; char c; cin > > col> > c; //判断行列大小 if(col%2==0) row=col/2; else row=col/2+1; //第一行 for(int i=0; i< col; i++) cout< < c; cout< < endl; //第二行到倒数第二行 for(int i=2; i< row; i++) cout< < c; for(int j=0; j< col-2; j++) cout< < " "; cout< < c< < endl; //最后一行 for(int i=0; i< col; i++) cout< < c; cout< < endl;

日期处理有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
每组数据输出一行,即日期差值
20130101 20130105

5

#include< cstdio> int month[13][2] = // 平年和闰年的每个月的天数 0,0,//仅用于填充month[0][0] 无实际意义 31,31,//1月 28,29, 31,31, 30,30, 31,31, 30,30, 31,31, 31,31, 30,30, 31,31, 30,30, 31,31//12月 ; bool isLeap(int year)//判断是否是闰年 return(year % 4 == 0 & & year % 100 != 0) || (year % 400 == 0); int main() int time1, y1, m1, d1; int time2, y2, m2, d2; while(scanf("%d%d", & time1, & time2) != EOF) if(time1 > time2) int temp = time1; time1 = time2; time2 = temp; y1 = time1 / 10000, m1 = time1 % 10000 / 100, d1 = time1 % 100; y2 = time2 / 10000, m2 = time2 % 10000 / 100, d2 = time2 % 100; int ans = 1; //记录结果//第一个日期没有达到第二个日期时进行循环 //即 !((y1 == y2) & & (m1 == m2) & & (d1 = d2)) while(y1 < y2 || m1 < m2 || d1 < d2)d1++; //天数加 1if(d1 == month[m1][isLeap(y1)] + 1)//满当月天数 m1 ++; //日期变为下个月的 1 号 d1 = 1; if(m1 == 13)//月份满 12 个月 y1++; m1 = 1; ans++; //累计 printf("%d\\n", ans); //输出结果 return 0;

进制转换输入两个非负10进制整数A和B(< =230-1),输出A+B的D (1 < D < = 10)进制数。
输入在一行中依次给出3个整数A、B和D。
输出A+B的D进制数。
123 456 8
1103
#include< cstdio> int main() int a, b, d; scanf("%d%d%d", & a, & b, & d); int sum = a + b; int ans[31], num = 0; // ans 存放 D 进制的每一位do// 进制转换 ans[num++] = sum % d; sum /= d; while(sum != 0); for(int i = num - 1; i > = 0; i--)//从高位到低位进行输出 printf("%d", ans[i]); return 0;

字符串处理读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
一行字符串,长度不超过255。
如果是回文串,输出“YES”,否则输出“NO”。
12321
YES
#include< cstdio> #include< cstring> const int maxn=256; bool Judge(char character[])int lenth=strlen(character); for(int i=0; i< lenth/2; i++)//数组折中,i对应max-i-1 if(character[i]!=character[lenth-1-i]) return false; return true; int main()char character[maxn]; while(gets(character))bool flag=Judge(character); if(flag==true)printf("%s","YES\\n"); return 0; elseprintf("%s","NO\\n"); return 0; return 0;

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
每个测试用例的输出占一行,输出倒序后的句子。
Hello World Here I Come
【算法开胃小菜】Come I Here World Hello
#include< cstdio> int main() int num = 0; //单词的个数 char ans[80][80]; while(scanf("%s", ans[num]) != EOF)//一直输入直到文件末尾 num++; //单词的个数加 1 for(int i = num - 1; i > = 0; i--)//倒着输出单词 printf("%s", ans[i]); if(i > 0) printf(" "); return 0;


    推荐阅读