算法设计
算法
TYP_MOON
这个作者很懒,什么都没留下…
展开
-
统计问题:找链环数字对的出现频率
#include<stdio.h>#include<stdlib.h>void pair_digital(int n){ int a[10][10]={0};//定义存储链环数字对个数的数组,其两个下标代表输入的数字对 int x1,x2; scanf("%d",&x1); int i,j; for(i=1;i<n;i++)//填入数组,第一个数x1已输入,所以i从1开始只需再输入n-1个数即可 { .原创 2020-06-16 23:12:26 · 851 阅读 · 0 评论 -
魔方阵
数独入门的朋友肯定都知道有一个左上角法则(我命名的,如果有正确的命名方法请指正)按照上述三阶魔方阵摆放顺序依次为:567891234下面给出的算法和这种方法相似,可对照理解:#include<stdio.h>#include<stdlib.h>int array(int n){ int i, j, no, num, max; int *mtrx; if(n%2 == 0) /*n是偶数,则加1使其变为奇数*/ {..原创 2020-06-16 22:33:31 · 163 阅读 · 0 评论 -
螺旋阵
在螺旋矩阵中,可以分为左、下以及右、上两部分,其中,#include<stdio.h>int main(){ int i,j,k,n; int x,y; int t = 1; int a[100][100],b[2];//a数组用来存储整个数组,b数组用来表示行、列向量的下标 scanf("%d" ,&n);//n为矩阵阶数 b[0] = 0;//记录矩阵行下标 b[1] = 1;//记录矩阵列下标 x = 1;.原创 2020-06-16 18:49:44 · 467 阅读 · 0 评论 -
使左对角线和右对角线上的元素为0
上述图解让你大致了解了这个算法该如何设计,但在实操上需要做一定量的更改:最重要的一点就是上面的矩阵图的序列是1~5,但是代码中数组的初始下标是0,所以初始化i和j时,i=0 , j=0,这时副对角线的条件就改变为:i+j=n-1#include<stdio.h>#define N 5int main(){ int i,j; int a[100][100]; for(i=0;i<N;i++){ for(j=0;j<=N;j++){..原创 2020-06-09 17:13:39 · 1638 阅读 · 2 评论 -
✳编程求当n≤100时,n!的准确值
如果对100!这个数没有什么概念,可以从1!开始找规律:1!12!23!64!245!1206!7207!50408!403209!36288010!362880011!39916800…………100!?按照输出格式,每六位分一格#include<stdio.h>int main(){ int a[256],b,d;//数组存储中间乘法结果 int m.原创 2020-06-03 21:44:57 · 1495 阅读 · 2 评论 -
高精度数据×长整数
基本思路①每次乘数的一位与被乘数相乘的个位结果在最终结果中都不变,所以每次个位数直接用数组记录下来②根据对乘法竖式的理解,每两个惩罚结果(eg:被乘数的个位和十位分别与乘数相乘的结果加和,十位的相乘结果会比个位的要前移一位)这时,可以想成是上面的数去掉末位(eg:b/=10;)与下一个乘法结果相加,这样就符合加法的正常思路。#include<stdio.h>#include<string.h>int main(){ long b,c,d; int a[原创 2020-05-23 09:09:58 · 718 阅读 · 0 评论 -
报数退圈问题(C语言)
方法一#include <stdio.h>int c[13];int main(){ int i, j, n, pre, cur, m; printf("分别输入总人数和报数退出的序号:\n"); scanf("%d %d", &n,&m); if(n==1) printf("1\n"); else { for(i=0; i<n-1; i++) c[i]=i+1; c[n-1]=0;.原创 2020-05-20 12:21:54 · 1272 阅读 · 0 评论 -
求x,使x^2为一个各位数字互不相同的9位数
#include<stdio.h>int main( ){ int i,t,k,num=0; long x,y1,y2; int p[10]; for(x=10000;x<=31622;x++){ for(i=0;i<=9;i++){ p[i]=1; } y1=x*x; y2=y1; k=0; for(int i=1;i<..原创 2020-05-20 09:53:14 · 1401 阅读 · 0 评论 -
一个顾客买了价值x元的商品(C语言)
#include<stdio.h>int main( ){ int i,j; int x,y,z; //这里找一百不符合常理,就不加入数组中 int a,b[7]={0,50,20,10,5,2,1},s[8]; //标价x元,给出y元 scanf("%d %d",&x,&y); z=y-x; for(j=1;j<=6;j++){ a=z/b[j]; s[j.原创 2020-05-20 08:51:16 · 1383 阅读 · 0 评论 -
编写算法将数字编号“翻译”成英文编号(C语言)
方法一(算法书上的方法)#include <stdio.h>#include <stdlib.h>int main(){char eng[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};int n,end=0,num[10];printf("输入你要翻译的数字:");scanf("%d",&n);int temp=n;while(temp!=0).原创 2020-05-19 22:05:43 · 1649 阅读 · 0 评论 -
某校决定由全校学生(C语言)
五个候选人定义编号分别为1,2,3,4,5,将每个编号初始化为0,键入数据中有一个1~5的值,该序号的数据+1.原创 2020-05-18 21:18:06 · 611 阅读 · 0 评论 -
找出n个自然数(1,2,3,…,n)中取r个数的组合(C语言)
#include<stdio.h>int main(){ int n,r; int i,j,k; int t=0; //输入1~n所有的r个数的组合,其中要求三个数不能相同,且后一位要大于前一位 scanf("%d %d",&n,&r); // for(i=1;i<=n-r+1;i++){ for(j=i+1;j<=n-r+2;j++){ for(k=j+1;k&...原创 2020-05-16 23:44:23 · 3513 阅读 · 0 评论 -
任何一个正整数都可以用2的幂次方表示(C语言版)
这道题其实可以看作是:十进制转二进制的问题。如果你基础不太好没关系,记住十进制转二进制的口诀:除二取余#include<stdio.h>int try(int n,int r);int main(){ int n; scanf("%d",&n); if(n>=1){ try(n,0); } else printf("Data Error!!!\n"); return 0;}int tr.原创 2020-05-16 12:09:54 · 4693 阅读 · 0 评论 -
任给十进制整数,请从低位到高位……
其实这个题目本质上就是将输入的字符串或者字符数组逆序输出,也是我比较喜欢用的办法,可以解决大部分类似的问题。但为了学习到算法的多种可能性,下面用三种方法来对这个问题进行求解:文章目录字符数组逆序输出递归法循环法字符数组逆序输出#include<stdio.h>#define N 65535int main(){ char ch; char str[N]; int cnt=0; //输入 ch=getchar(); for(int i=.原创 2020-05-15 21:28:46 · 923 阅读 · 1 评论 -
回溯法解整数的划分问题(C语言)
C++#include<iostream>#define MAX 100using namespace std;int main(){ int n; int num[MAX] , top , sum; int i , flag; while(cin>>n) { num[0] = n; top = 0; cout<<num[0]<<endl; f.原创 2020-05-15 18:23:10 · 1008 阅读 · 0 评论 -
鞍点(C语言)
#include<stdio.h>#define M 3#define N 3int main(){int m, n;printf("输入行数和列数:");scanf("%d %d", &m, &n);int i, j, max, maxj, k, flag = 0;int a[M][N] = { 0 };printf("请输入数组:");for (i = 0; i < m; i++){for (j = 0; j < n; j++)sc..原创 2020-05-15 07:49:46 · 11372 阅读 · 2 评论 -
打印图形(2)(直角三角形)(C+Java)
1.需要打印的图形第一种:*********************………………………………C版#include<stdio.h>int main(){ int m; scanf("%d",&m); for(int i=0;i<m;i++){ for(int j=0;j<=i;j++){//打印每一行的...原创 2020-03-14 13:21:21 · 1060 阅读 · 0 评论 -
打印图形(1)(C+Java)
要求编写算法输出下列图形: 1 5 2 8 6 310 9 7 4 …………………………………………………………有两个方法来进行表示,但是原理是一样的由上面图形可知,左下角的数是图形中最大的数且数值为主对角线(即每行的最右边的数)之和方法一:由求和公式得出Kmax=m(m+1)/2#include<stdio.h>#define N...原创 2020-03-13 20:50:03 · 434 阅读 · 0 评论 -
有一只经过训练的蜜蜂……
#include <stdio.h>int a[51] = {0, 1};int main(){int n, m, i;printf("请分别输入蜂房a和蜂房b的序号:\n");scanf("%d %d",&m,&n);n-= m;n++;for(i=2;i<=n;i++){a[i]=a[i-1]+a[i-2];}printf("a-->b的路径共有%d条。\n",a[n]);return 0;}...原创 2020-05-12 18:02:49 · 639 阅读 · 0 评论 -
读入自然数m、n,判断m/n是有限小数还是循环小数
#include<iostream>using namespace std;int main(){ double m,n; double t; cin>>m>>n; if(m>n){ t=n/m; if(t*m==n){ cout<<"有限小数:"<<t<<endl; } else{ .原创 2020-05-12 12:18:58 · 1550 阅读 · 2 评论 -
乘法还原
方法一#include<stdio.h>int Isprime(int a);int main(){ int i,j,x,y,z; for(i=200;i<800;i++){ if(Isprime(i)){ for(j=20;j<80;j++){ if(Isprime(j)){ x=i*(j%10); if(x.原创 2020-05-12 11:21:38 · 514 阅读 · 2 评论 -
两个乒乓球队进行比赛,各出三人。
#include<stdio.h>#include<stdlib.h>int main() { char A,B,C; char str; for (str = 'X'; str <= 'Z'; str++) { if (str != 'X' && str != 'Z') { C = str; } } for (str = 'X'; str <= 'Z'; str++){ if (str != 'X' &&.原创 2020-05-12 09:32:14 · 530 阅读 · 0 评论 -
狼找兔子问题
我们先做一个假设,你围着400米的环形跑道跑步,分多次(整数次)跑,每次跑150米,如果你想回到原出发点,那么毫无疑问你跑的最短总路程为400米的整数倍同时也是150米的整数倍并且为最小公倍数1200米,需要经过1200/150=8次奔跑。经过以上分析,我想你已经明白了狼找兔子经过的最小总山洞数目为n、m的最小公倍数,假设该公倍数为k,那么狼搜索过的山洞为k/m个。如果完成整个过程狼搜索过的山洞为n,那么兔子便无处藏身( 即k/m=n亦即k=mn)。在数学中我们已经知道(mn)/ (m, .原创 2020-05-12 09:30:09 · 1879 阅读 · 5 评论 -
给一维数组输入6个整数,假设为5,7,4,8,9,1
方法一#include<stdio.h>int main(){ int i,j,k,a[6]; //输入 for(int i=0;i<6;i++){ scanf("%d",&a[i]); } for(i=0;i<6;i++) { for(j=0;j<6;j++) { k=(j-i)<0?j-i+6:j-i; printf("%d ",a[k]); } printf("\n"); } retu.原创 2020-05-12 00:18:29 · 4166 阅读 · 0 评论 -
2+22+222+2222(直到n个2的精确计算)
#include<stdio.h>int main(){ int a=0,i,n;//a初始化为0,用来存放每次更新的加数 int cnt=0;//记录求和 scanf("%d",&n); for(i=0; i<n; i++) { a=(a*10)+2;//每次加数左移一位并在个位+1 cnt+=a; } printf("%d\n",cnt); return 0;}...原创 2020-05-11 19:04:16 · 2488 阅读 · 0 评论 -
求两个整数的最大公约数
#include<stdio.h>int main(){ int a,b,i; int t=1; scanf("%d %d",&a,&b); for(i=2;i<=a&&i<=b;i++){ while(a%i==0&&b%i==0){ t*=i; ...原创 2020-04-26 20:06:54 · 134 阅读 · 0 评论 -
求1000以内的所有完数
#include<stdio.h>int main(){ for(int i=1;i<=1000;i++){ int cnt=0; for(int j=1;j<i;j++){ if(i%j==0){ cnt+=j; } } ...原创 2020-04-26 18:41:14 · 1786 阅读 · 2 评论 -
1/1!-1/3!+1/5!-……
#include<stdio.h>int main(){ int i,n,j,flag=1; float s=1,t=1; scanf("%d",&n); for(i=2;i<n;i++){ flag=-flag; t*=(2*i-1)*(2*i-2);//直接在之前计算出的t的基础上 s...原创 2020-04-26 17:00:00 · 890 阅读 · 0 评论