【启蒙】C笔记之初学阶段(下篇)
下篇继续点赞,谢谢老铁,不存在下次一定的哈!
c语言简单判断质数的方法
int isprime(int a){ if(a==2) return 1; else if(a%2==0||a==0||a==1) return 0; else { for(int i=2;i<=sqrt(a);i++){ if(a%i==0) return 0; } } return 1; }
后续会更新线性筛法求质数!
记忆搜索法
一道能够体现初学者智慧的题目
给定任意n,输出边长为n的菱形图形。
聪明的读者可以尝试一下哦!
#include <stdio.h> #include <math.h> int main() { int n, x, y, t, g; scanf("%d", &n); for (y = -(n - 1);y <= (n - 1);y++) {//将数学的思维带入C语言中,做成了线性规划,实在牛逼!!!! for (x = -(n - 1);x <= (n - 1);x++) { t = abs(x); g = abs(y); if (t + g <= (n - 1)) printf("*"); else printf(" "); } printf("\n"); } return 0; }
此题充分利用了双重循环+限制条件。
再来一个变形题,那么这一次都应该会了吧!
做无心菱。
if(t+g==(n-1)) printf("*");//改改限制条件就好了!
字典排序
字典序法中,对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列12354和12345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是54321。
首先普及一个知识点(摘自百度百科)
extern int strcmp(const char *s1,const char *s2);
下面给出代码:
#include<stdio.h> #include<string.h> char ch[6][5] = { "a","ac","ab","aeg","aef" }; void order() {//用了选择排序,其实就是按ASCII码从小到大排序 char temp[10]; for (int i = 0;i < 4;i++) { int a = i; for (int j = i + 1;j < 5;j++) { if (strcmp(ch[a], ch[j]) > 0) a = j; //后面的字符比前面的大 } if (a != i) { strcpy(temp, ch[a]); strcpy(ch[a], ch[i]); strcpy(ch[i], temp); } } } //排序记住一个原则就好了,用尽所有手段让其回到它该在的位置,这对于后面的快速排序很有帮助。 int main() { order(); for (int i = 0;i < 10;i++) { printf("%s ", ch[i]); } return 0; }
使用int类型的数据保存字符串数字
for(c=1;c<=m;c++)
{
for(d=1;d<=n;d++)
{
scanf("%1d",&mapp[c][d]);
}
}
求三个数中的最大值
#include<stdio.h>
int main(){
int a,b,c,max;
scanf("%d%d%d",&a,&b,&c);
max=a;
if(max<b) max=b;
if(max<c) max=c;
printf("%d",max);
return 0;
}
简单升级版
int compare(int a,int b,int c){ int r; r=a>b?a:b; return r>c?r:c; }
用递归求n!
#include<stdio.h> int main() { int fac(int n); int n,y; printf("输入一个整数阶乘:"); scanf("%d",&n); y = fac(n); printf("%d!=%d\n",n,y); return 0; } int fac(int n) { int f; if(n<0) printf("n<0,数据错误"); else if(n == 0||n == 1) f = 1; else f = fac(n-1)*n; return(f); }
求N个数 的最小公倍数
普及知识点:最小公倍数=两整数的乘积÷最大公约数
求汉字数量
先来做一个例题测测你水不水!
http://www.51cpc.com/problem/4025
题解:
https://www.cnblogs.com/Attacking-vincent/p/12721895.html
涨知识了吧!
数学思维经典题
①
试统计正整数n的阶乘n!=1×2×3×…×n尾部连续零的个数。
提交题目点:http://www.51cpc.com/problem/4018
这题用模拟的思路写的话代码可能很长,但是用数学的思维去想的话代码还是很简单滴。
个人题解:https://www.cnblogs.com/Attacking-vincent/p/12767434.html
②
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。 小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。 你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。 本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
提交题目点:http://www.51cpc.com/problem/4051
这题用数学公式一下就写出来了,用正常代码写就不一定咯。
看看我的题解,告诉你,如何在不知道数学公式的情况下,写出这题。
个人题解:https://www.cnblogs.com/Attacking-vincent/p/12769142.html
喜欢就点个推荐或者收藏吧!