算法细节1 c/c++入门

比较三数值大小

从键盘输入3个实数a,,b,c,通过比较交换,将最小值存储在变量a中,最大值存储在变量c中,中间值存储在变量b中,并按照从小到大的顺序输出这三个数a, b, c。

思路:比较ab、ac、bc,若a>b、a>c、b>c则互换,则输出时得到a<b<c

if(a>b) {
    temp=a;
    a=b;
    b=temp;
if(a>c) {
    temp=a;
    a=c;
    c=temp;
if(b>c) {
    temp=b;
    b=c;
    c=temp;

求pi近似值

π = ( 4 / 1 ) ( 4 / 3 ) + ( 4 / 5 ) ( 4 / 7 ) + ( 4 / 9 ) ( 4 / 11 ) + ( 4 / 13 ) ( 4 / 15 ) π = (4/1) - (4/3) + (4/5) - (4/7) + (4/9) - (4/11) + (4/13) - (4/15) …

求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。

思路:分子变正负号,分母每项+2

float s=4;
float pi=0;
float i=1.0;
float n=1.0;
while(fabs(i)>=1e-6){
        pi+=i;
        n=n+2;
        s=-s; 
        i=s/n;
}

有序插入

假设数组长度为10,数组中前9个数(这9个数要求从键盘上输入,输入时要满足自小到大的输入顺序)已经按从小到大进行排序。

然后再从键盘上输入一个整数,将此整数插入到前有序的9个数中,使得最终的10个数依然是从小到大有序的。

思路:从原数列最右项开始比较,若新数比它小,则原数右移一位,否则新数占据原数位置

for(i=9; i>=0; i--) {
    if(k<a[i]) {
        a[i+1]=a[i];
    } else {
        a[i+1]=k;
        break;

杨辉三角

按要求输入如下格式的杨辉三角

1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

最多输出10层

思路:用二维数组,第一层循环决定行数,第二层循环不仅确定每行数字数量,还要确定其值;输出二维数组时也要用两层循环

//已初始化a[0][0]=1
for(i=1; i<=n; i++) {
    a[i][0]=1;
    for(j=1; j<=i; j++) {
        a[i][j] = a[i-1][j-1]+a[i-1][j];
    }
}
for(i=0; i<=n; i++){
    for(j = 0; j <= i; j++)

解密

有一行电文,已按如下规律译成密码:

A–>Z a–>z

B–>Y b–>y

C–>X c–>x

思路:按大小写分类,实施变换:第i个字母变成第(26-i+1)个字母。
注意字符变换的时候减去相应的“ascii码-1”表示第i个字母,比如a的ascii码是97,则减去96值变为1

if (string[i] >= 'a' && string[i] <= 'z')
    string[i] = 27 - (string[i] - 96) + 96;//a的ascii码是97

矩阵转置

将一个2行3列的矩阵(二维数组)行列互换,存储到另一个3行2列的矩阵中。

思路:将两个二维数组行列对调即可

for(i=0; i<=1; i++) {
    for(j=0; j<=2; j++) {
        scanf("%d", &a[i][j]);
        b[j][i]=a[i][j];
        }
    }

字符串求最大值

从键盘上输入3个字符串,求出其中最大者。 输入 输入3行,每行均为一个字符串。

思路:利用strcmp函数(分别返回>0,=0,<0),然后利用strcpy(复制后者)输出最大值

if(strcmp(a,b)>0) {
    strcpy(max,a);
} else {
    strcpy(max,b);
if(strcmp(max,c)>0) {
    strcpy(max,c);
}
puts(max);

字符串逆序存放

思路:定义函数,设置两个长度相同的数组,一个数组的序号等于另一个数组的逆序号(与矩阵转置题类似,数组与数组直接对应即可)

int str(char a[100], char b[100]) {
    int i=0, j, k;
    j=strlen(a);
    k=j-1; //数组a最后一位的序号
    for(i=0; i<j; i++) {
        b[k]=a[i];
        k--;
    }
    return 0;
}

复制字符串中的元音字母

思路:枚举一个数组中的元音字母(大小写一共十个),令另一个数组等于这些项即可

void fuzhi(char s1[])
{
    int i, j, n;
    char s2[100];
    	for(i=0,j=0;s1[i]!='\0';i++) //'\0'表示字符串结尾时结束
	{
		if((s1[i]=='a')||(s1[i]=='e')||(s1[i]=='i')||(s1[i]=='o')||(s1[i]=='u')||(s1[i]=='A')||(s1[i]=='E')||(s1[i]=='I')||(s1[i]=='O')||(s1[i]=='U')) {
		n++;
		s2[j]=s1[i];
		j++;
		}
}
	s2[j]='\0';
	puts(s2);
}

猜你喜欢

转载自blog.csdn.net/weixin_44770248/article/details/89706953
今日推荐