这一周的总结和经典算法程序(排序,算法,以及细节总结)
C语言常见细节错误:
1.输出乱码的可能原因:
(1)变量的调用问题;
(2)对变量的赋值以及初始化(数组更要注意初始化);
(3)观察数组是否越界;
2.常见的坑:
(1)数组的界,一般都要开大一点,够用为主,浪费暂不考虑;
(2)输出时不能.6来控制小数点;
(3)对于初始复制注意是0还是1,这对于数组和其他的运算至关重要;
3:养成良好习惯,结尾加上return 0;
基本数据类型: short int long char double float(32位机系统下)
2 4 4 1 8 4
float控制在7-8位,double控制在15-16位,且double精度更高,如果不存在强制类型转换,float可以向double转变,(c99系统下,存在long double等复杂数据类型)
4.注意算法题的输入输出形式的规定以及测试数据的范围决定数据类型,必要时强制类型转换。
5.不想强制类型转换时也可以将数据转换为同种类型数据,就可以进行运算。
6.对于if else语句,如果需要使用当前条件补集的情况,则直接else,不然else if。
7对min和max进行初赋值,然后条件语句进行判断。
经典算法;
输出一个直角三角形(输出个数依次递减,但数字按照顺序输出)
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int cnt=0;
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
cnt++;
if(cnt<10)
{
printf("0");
}
printf("%d",cnt);
}
printf("\n");
}
return 0;
}
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
}
可取之处,先遍历,然后二重循环可以有效解决这种问题;
int sushu(long long int n)
{
for( long long int i=2;i<sqrt(n);i++)
{
if(n%i==0)
{
return 0;
}
}
return 1;
}
判断素数要把返回值放在循环外面,这样不会一步就跳出循环;
double f(int n)
{
if(n==0) return 0;
if(n==1) return 1;
return f(n-1)+f(n-2);
}
递归思想(适用于斐波那契),不过要注意前面元素的特殊性,自己调用自己;
#include<stdio.h>
int main()
{
int book[1001],i,j,t,n;
for(i=0;i<=1000;i++)
book[i]=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&t);
bppk[t]++;}
for(i=1000;i>=0;i--)
for(i=j;j<=book[i];i++)
printf("%d",i);
}
桶排序,很好的一种排序算法!
#include <stdio.h>
void bubble_sort(int arr[], int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
int main() {
int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
int len = (int) sizeof(arr) / sizeof(*arr);
bubble_sort(arr, len);
int i;
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
return 0;
}
冒泡排序,第二封神!
//待排序数组
private int[] arr= {-1,3,5,8,1,2,1,9,4,7,6};
//定义一轮快排方法
public int Sorting(int low,int high) {
//标记位置为待排序数组段的low处也就时枢轴值
arr[0]=arr[low];
while(low<high) {
/**
* 如果当前数字已经有序的位于我们的枢轴两端,我们就需要移动它的指针,是high或是low
*/
while(low<high && arr[high]>=arr[0]) {
high--;
}
/**
* 如果当前数字不满足我们的需求,我们就需要将当前数字移动到它应在的一侧
*/
arr[low]=arr[high];
while(low<high && arr[low]<=arr[0]) {
low++;
}
arr[high]=arr[low];
}
arr[low]=arr[0];
return low;
}
快排!
下次再见。