一:字符串(数组)的逆序,栈的方法
**字符串数组的逆序 : **
标准容器库的知识:定义stack容器于字符串:stackv; string s;
//这里用到了c++中stl(标准容器库的知识)stack;
//用的时候要声明头文件;定义stack容器和string;stack<string>v; string s;
了解几个函数,
v.top( );//让最后一个元素出栈;(v是定义的变量名)
v.pop( ); //删除栈顶元素;
v.empty();//判断栈是否为空 ,返回一个整数...是空返回1;不为空返回0;
v.push( s);//把元素放入栈中;
// 实现字符串数组的逆向输出;
while(cin> >s )v.push(s);//把元素放入栈中;
//我就想问这你这for语句什么时候停z
cout<<v.top();v.pop();
while(!v.empty){cout<<" "<<v.top(); v.pop();}//输出栈中内容,这里内容是字符串.
注意:若输出用printf,方法如下”
//如果想⽤printf输出string,得加⼀ 个(字符串变量名).c_str()
//printf("%s",s.c_str());
/*
如何在Dev-Cpp中使⽤C++11中的函数:
如果想要在 Dev-Cpp ⾥⾯使⽤C++11特性的函数,⽐如刷算法中常⽤的stoi 、 to_string 、 unordered_map 、 unordered_set 、 auto 这些,需要在设置⾥⾯让dev⽀持C++11。
~需要这样做~
在菜单栏中⼯具-编译选项-编译器-编译时加⼊ -std=c++11 这句命令即可~
*/
二:f(x)=∑(i=0->i=n)=(a[i]×x^i) 在x
点的值。
//此处x是一个常数
/*
假如n=2,x=2, f(x)=a[0]x(2^0)+ a[1]x(2^1)+a[2]x(2^2);
从上式子中我们看到a【2】的2成了2次,a【1】一次,a【0】零次。
此时式子可以用下面的循环表式:
for(int i = 2; i > =0; i--)
{
add = add * 2 + a[i];
}
*/
double f( int n, double a[], double x )
{
double add = 0;
for(int i = n; i > -1; i--)
{
add = add * x + a[i];
}
return add;
}
三:统计给定数中某个数的个数
这种题首先要得到数字的每一位(除10和余10的语句),利用while循环来判定所给的数是否和题目中所给定的相同,相同就把它放到数组中,所以定义一个数组 a【10】来统计0-9出现的次数。
//例如a=4589145;要统计某位数 **或者** 统计出现最多的次的那位数;
int arr[10]={0};
int m
int n=4589145;//给定的数字;
while(n)
{
m=n%10;
arr[m]++;
n/=10;
}
//如果要求给定的数字N;就按照要求输出 arr【N】;不是自定义函数就用printf输出,是的话一般return a【N】;
//如果要返回出现最多的就循环遍历查找最大的那个数字,如下:
int max=0;
int temp;
for(int i=0;i<10;i++)
{
if(a[max]<a[i])
{
temp=a[i];
a[i]=a[max];
a[max]=a[i]];
}
}
//最后按要求输出。
四:阶乘运算
不在整数范围内的比较难,多看看吧!
//阶乘一般运算( 在整数范围内的);
//给定一个数(如n=10),然后求阶乘,用for循环解决
int n=10;//给定的数;
int sum=1;//求和喽;
for(int i=1;i<10;i++)
{
sum=sum*(i+1);
}
//还有就是有种不在整数范围内的,这种需要用到数组;
//例如计算1000的阶乘
int num=1000;//给定的数
int k=1; // 位数
int n=0; // 进位
int ar[3000]=0;ar[0]=1;//给定足够大的数组,使能够存放下结果;
int temp;//暂时计数;
int i,j;//循环遍历用到
for( i=2;i<=num;i++)
{
for(j=0;j<k;j++)
{
temp=ar[j]*i+n; // 相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)
ar[j]=temp%10; // 更新临时结果的该位上的信息
n=temp/10; // 看是否有进位
}
while(n) //看是否进位
{
ar[k++]=n%10; // 新加一位,添加信息。位数+1
n/=10; /
}
}
五:计算中位数
//数组里的中位数
//考题好像不分奇数偶数 如果是奇数个,像ar【5】,就返回ar【2】
// 如果偶数个,像ar【4】,就返回那个叫大的ar【2】
//及返回的是ar【n/2】;
//这里考察的是排序算法(这个例题给了个希尔排序),主要考察时间复杂度,所以像冒泡,选择,直接排序都通过不了;
int N;//给定
for(d = N/2; d >= 1; d/=2){
for(i=d;i < N; i++){
for(j=i-d;j>=0&&A[j]>A[j+d];j-=d){
temp = A[j];
A[j] = A[j+d];
A[j+d] = temp;
}
}
}
六 :计算a+aa+aaa+…+
#include<stdio.h>
#define N 100001
int s[N]= {0};
int main()
{
int a,n;
int i,j,index,t;
scanf("%d %d",&a,&n);
index=n;
if(n==0)
printf("0");
else
{
for(i=0,j=n; i<n; i++,j--)
{
t=s[i]+j*a;
s[i]=t%10;
if(t/10)
s[i+1]=t/10;
}
}
if(s[n]>0)
index=n+1;
for(i=index-1; i>=0; i--)
printf("%d",s[i]);
return 0;}
七:排序
冒泡排序
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i-1;j++)
if(a[j]>a[j+1])
int temp;
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
选择排序
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(a[i]>a[j+1])
int temp;
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
直接排序
for(int i=1;i<n;i++)
int key=a[i];
j=i-1;
while(j>=0&&a[j]>key)
{
a[j+1]=a[j];
j--;
}
a[j+1]=key;
希尔排序
for(d = N/2; d >= 1; d/=2){
for(i=d;i < N; i++){
for(j=i-d;j>=0&&A[j]>A[j+d];j-=d){
temp = A[j];
A[j] = A[j+d];
A[j+d] = temp;
}
}
}
八:查找
折半查找
binarySearch(int a[], int n, int key){
int low = 0; //low表示指向最小的元素
int high = n - 1; //high表示指向最大的元素
while(low<= high){
int mid = (low + high)/2;//mid表示指向最中间的元素(奇数指向最中间,偶数指向较大的那个数字)
int midVal = a[mid]; //最中间的那个值;
//比较最中间的值与目标值的大小,如果key大说明要让low修改
if(midVal<key)
low = mid + 1;
else if(midVal>key)
high = mid - 1;
else
return mid;//找到该元素
}
return -1;//没有找到;
}
小知识
1cm=30.48foot(英尺)
1foot=12inch(英寸)
圆周率
给定精度k,计算圆周率的值:
//计算圆周率
#include<stdio.h>
int main()
{
float temp=1;//temp用于记录每项式的值;temp=n/d;
float n=1,d=3,sum=1;//n表示分子的值, d表示分母的值, sum表示和;
float i=2, k;//提供 给定的精度;
scanf("%f",&k);//没有&都运行没结果了.........
while (temp>=k){
temp=n/d;
sum+=temp;
n=n*i;//下一项分子
d=d*(2*i+1);//下一项分母;
i++ ;
}
printf("%.6f",sum*2);
return 0;
}
最大公约数
//1.
int a,b;
int temp
scanf("%d %d",&a,&b);
if(a>b)
{
temp=a;
a=b;
b=temp;
}
for(i=a;i>0;i--)
{
if( a%i==0&&b%i==0) break;
}
printf("%d",i);
//2.
int a,b;
int temp=1;
scanf("%d %d",&a,&b);
if(a>b)
{
temp=a;
a=b;
b=temp;
}
while(temp!=0)
{
temp=b%a;
b=a;
a=temp;
}
cout<<b;
素数
int i,n;
//1.0
for(i=2;i<n;i++)
{
if(n%i==0)
break;
}
if(i=n)cout<<"sushu";
else cout<<"bushi";
//2.0
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
break;
}
if(i>sqrt(n)) cout<<"sushu";
else cout<<"bushi"