0%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,m,k;
cin>>n>>m;
char array[n][n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>array[i][j];


//储存数据0(n)
int M=max(n,m);
int I[M],J[M],a=0,b=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(array[i][j]=='g')
{
I[a++]=i;
J[b++]=j;
}
//扩散
cin>>k;
for(int i=0;i<a;i++)
{
for(int r=I[i]-k;r<=I[i]+k;r++)
for(int s=J[i]-k;s<=J[i]+k;s++)
{
if(r>=0&&r<n&&s>=0&&s<m)
array[r][s]='g';
}

}
//输出
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
cout<<array[i][j]<<" ";
cout<<endl;
}
return 0;


}

1.使用sstreamm类整数转换为字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<sstream>
using namespace std;
void is2(int x,string &s_basic)
{
stringstream ss;
ss<<x;
ss>>s_basic;
}
int main()
{
string s1;
int n=123456;
is2(n,s1);
cout<<s1[3];
return 0;
}
阅读全文 »

1.主要思想快速幂的算法

1
2
3
4
5
6
7
8
9
10
11
12
13
int fastPower(int base, int exponent) {
int sum = 1;
while (exponent != 0)
{
if ((exponent & 1) != 0)
{
sum *= base;
}
exponent = exponent >> 1; // 对指数进行移位
base *= base; // 让base的次幂以2的倍数增长
}
return sum;
}
阅读全文 »

问题描述

  Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。
  给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:
  1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。
  2. 重复步骤1,直到{pi}中只剩下一个数。
  在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。
  本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

  例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:
  1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。
  2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。
  3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。
  4. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。
  5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

输入格式

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<iostream>
#include<algorithm>
#include<cmath>
#define Max 100000
using namespace std;
int num[Max],len;
void Init()
{
num[0]=1;
len=1;
}
int mult(int num[],int len,int n)//num为数据中的每一个数,len为数组长度
{
long long temp=0;
for(int i=0;i<len;++i)
{
temp=temp+num[i]*n;//关键代码
num[i]=temp%10;
temp=temp/10;
}
while(temp)//最大的数temp每个取一位
{
num[len++]=temp%10;
temp=temp/10;
}
return len;
}

int main()
{
int n;
Init();//初始化数据
cin>>n;
for(int i=2;i<=n;++i)
len=mult(num,len,i);//len即长度不断更新
for(int i=len-1;i>=0;i--)
cout<<num[i];
return 0;
}

进制转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<iostream>
#include<algorithm>
#include<cmath>
#define Max 100000
#define R 16
#define Q 8
#include<string.h>
using namespace std;
char T[Max],G[Max];
int main()
{
int n;
cin>>n;
while(n--)
{
long long m=1,temp=0;
cin>>T;
//转化R为10进制
while(T[m]) { m++;} //判断T的长度
for(int i=0;i<m;i++)
{
if(T[i]>='0'&&T[i]<='9')
{
temp=temp+(T[i]-'0')*pow(R,m-1-i);
}
else
{
temp=temp+(T[i]-'A'+10)*pow(R,m-i-1);
}
}
//转化10为Q进制
int i=0; m=1;
while(temp)
{
G[i]=fmod(temp,Q)+'0';
temp=temp/Q;
i++;
}
while(G[m]) { m++;} //判断T的长度
int j=m-1;
for(int i=0;i<m/2;i++)
{
swap(G[i],G[j]);
j--;
}
cout<<G;
}

return 0;
}

不建议用来16进制转8进制,因数据过大,该算法有一定的缺陷。

阅读全文 »

全局变量在静态存储区分配内存,局部变量是在栈上分配内存空间的。(c语言程序在运行时会动态创建一个堆栈段,里面存放着调用栈,保存着函数的调用关系和局部变量。)如果数组太大,可能会造成栈溢出。
全局变量在静态存储区内分配内存,而局部变量是在栈内分配内存空间的。C语言编写的程序会在运行期间创建一个栈堆段,用来保存函数的调用关系和局部变量。而在main函数内部定义大数组相当于在站内需要一个很大的空间,会造成栈的溢出。
因此,当我们需要定义一个极大的数组时,最好在mian 函数外部定义这个大数组。

1. 易错点一

a<b<c在c语言中的解释是,a<b先会返回一个值,如果a<b为真则返回1,为假返回0,然后再进行1<c或0<c的运算。

2. 易错点二

若x和n都是int型变量,且x和n的初值都是6,则计算表达式x+=n++后,x的值为 12 ;n的值为:7

3. 易错点三

设有定义:float a=2,b=4,h=3;以下C语言表达式中与代数式 的计算结果不相符的是( B )
A)(a+b)h/2 B)(1/2)(a+b)h C)(a+b)h1/2 D)h/2(a+b)
因为1/2在C语言中计算等于零。

阅读全文 »

整型变量

整型变量一共具有四种类型:

  • 整型(int) 4字节
  • 长整型(long) 4字节
  • 长长整型(long long) 8字节
    阅读全文 »