|
周三A 股市场爆发井喷行情。早盘股指受美股影响小幅低开,并顺势下探,但是随着以中信证券为首的券商股整体走强,激发了市场压抑已久的反弹激情,个股纷纷强劲上扬,股指势如破竹一举收复2400 点,2500 点两大关口。尾市报收于2523 点,涨178 点,涨幅7.63%,创出今年以来的第三大单日涨幅,成交610 亿,较昨日明显放大。 从盘面观察,沪市前二十大权重股平均上涨8.51%,海通证券、中信证券、中国太保等均封住涨停。整体来看,今天两市仅有1 只个股下跌,而涨停的非ST 类股超过300 只,涨幅超过7%的个股更是多达1216 只,市场出现了极为罕见的井喷奇景。从行业指数的表现来看,各大行业全线上涨超过4%,其中地产、金融、传播三个行业均涨逾9%。 对今日的井喷行情,笔者认为启示如下: 1、 存在主力资金进场抢筹的可能。在A 股市场长期、大幅暴跌之后,A 股的估值水平全方位被低估,而在朦胧利好传闻的刺激下,有可能使各方主力强筹。今日市场的暴涨,成交量的大幅上升,权重股的大涨说明了这一点。 2、 上一周市场有四天收出缩量阳线正表明大盘离底不远,但本周一大盘大跌,创出2284 点的新低,完美的构建了空头陷阱。 3、 近期权重股的表现。近期权重股较为抗跌,银行、保险股走势强劲,今日这几个板块更是全面爆发,封杀了大盘的下跌空间,并为大盘的爆发立下汗马功劳。 4、 市场传言“限售股要通过券商二次发售”,这对券商板块整体刺激很大。早盘券商股即有异动,中信证券、宏源证券直达涨停,其中中信证券封单更是达到3000 万股。 今日大盘收出巨阳,可能较为清楚的表明了2284 点低点基本确立,但后续如何发展,行情高度如何,可能要由以下因素决定: 1、消息面。如果传闻消息能得以兑现,那么本轮反弹有可能就是中级反弹。 2、成交量。短线的成交量必须维持500 亿左右的水平,如果量能能稳步、温和放大,则行情可能走的更远。如果短线市场急剧放量,并快速上攻,行情的力度和高度将大打折扣。 3、由于近期宝钢和中信限售股平稳上市,未对市场整体造成冲击。由于前期市场的深幅下跌,公司股价较低,反而没有造成大股东抛售,但如果随着股价的上涨,在利益驱动下,造成大股东抛售,这种可能性是存在的。 从盘面上看,市场最危急的时刻似乎已经度过,我们似乎也已安然度过八月限售的洪峰,投资者可采取较为积极的态度,但随时提高警惕,短线涨幅较大的个股可高抛,仓位可控制在50%左右。 |
Blog 日志库
2008-08-21 四大因素决定后市 仓位50%
天利证券
2008-08-20 循环移位
大地勇士X
题目描述:
给你一个字符串"abcdefg",循环左移两位得到"cdefgab",
循环右移两位得到"fgabcde"
输入:
多组测试数据,每组一行,第一个是int范围内的整数n,
表示要右移的位数,如果n是负数则表示要左移。接着后面
是一个串长小于10000000的字符串。
最后遇到EOF标志的时候结束。
输出:
输出移位后的字符串
样例输入:
2 abcdefg
-2 abcdefg
样例输出:
fgabcde
cdefgab
难度:for beginner
#include<stdio.h>
#include<stdlib.h>
void left_move(char str[],int m)
{
int i;
char temp;
temp=str[0];
for(i=0;i<m-1;i++)
str[i]=str[i+1];
str[i]=temp;
str[m]='\0';
}
void right_move(char str[],int m)
{
int i;
char temp;
temp=str[m-1];
for(i=m-1;i>=0;i--)
str=str[i-1];
str[0]=temp;
str[m]='\0';
}
int main(){
int n,i,len=0;
char str[129];
printf("input \"leftnumber<<string\"\n");
fscanf(stdin,"%d %s",&n,str);
while(str[len]!='\0') ++len;
n=n%len;
if(n<0){
n=-n;
for(i=1;i<=n;i++)
left_move(str,len);
}
else if(n>0){
for(i=1;i<=n;i++)
right_move(str,len);
}
else
printf("%s\n",str);
printf("%s\n",str);
system("pause");
return 0;
}
2008-08-20 HY随机的幻方
大地勇士X
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 15
#define TRUE 1
#define FALSE 0
int main()
{
int m,i,j,k,ni,nj;
int magic[MAX][MAX];
printf("Enter the number your wanted\n");
scanf("%d",&m);
for(i=0;i<m;i++)
for(j=0;j<m;j++)
magic[i][j]=FALSE;
if((m>0)&&(m%2!=0)){
srand( (unsigned) time(NULL) );
i=rand()%m;
j=rand()%m;
for(k=1;k<=m*m;k++){
magic[i][j]=k;
if(i==0)
ni=m-1;
else
ni=i-1;
if(j==m-1)
nj=0;
else
nj=j+1;
if(magic[ni][nj]==FALSE){
i=ni;
j=nj;
}
else {if(i==m-1)
i=0;
else
i++;
}
}
for(i=0;i<m;i++){
for(j=0;j<m;j++)
printf("%4d",magic[j]);
printf("\n");
}
}
else
printf("Error in inuut data.\n");
system("pause");
return 0;
}
2008-08-20 最少砝码数的天平
大地勇士X
题目描述:
有这样一个奇怪的天平,它的砝码只有1g, 3g, 9g, 27g......
并且各只有一个,但它却能够称出所有整数g质量的物体
例如要称出质量2g,那就一边放一个3g,另一边放物体和1g的
砝码就可以了。放在物体那边的砝码在前面加负号表示之。
输入:
多组测试数据,每行只有一个正整数n,表示要称的物体质量,
n在32bit有符号整数所能表示的数的范围内,
最后请使用EOF结束本程序
输出:
怎么称质量n出来
样例输入:
2
3
4
5
样例输出:
2 = 3 - 1
3 = 3
4 = 3 + 1
5 = 9 - 3 - 1
难度:very easy
算法思路
(1)首先要知道砝码1,3,9,27,81,243,729,2187,6561,19683....为等比数列,q=1/3;
(2)从输入的数N分析,如果数N在0=1/2<N<=3/2=1,则N的计算公式中第一个数由1组成
或1=3/2<N<=9/2=4之间,则N的计算公式中第一个数为3
或4=9/2<N<=27/2=13之间,则N的计算公式中第一个数为9
或13=27/2<N<=81/2=40之间,则N的计算公式中第一个数为27
以此类推....
假如N=40,那么40在13=27/2<N<=81/2=40区间,则知道40=27+?
为?=40+27=13,那么13就再递归进行分解
(3)递归的退出条件:
1.当N 除以 他左区间那个数时(如40就是27)余数等于等比数列中其中一个;
2.当N 减去 他左区间那个数时(如40就是27)等于等比数列中其中一个;
(4)如是上面那个?不符合(3)中的条件时,递归.
(5)需要注意的是每次递归出来的结果是加了圆括号()了,如果进递归前的符号不为负时
则下一步符号不用改变,相反为负号是就要改变;
例:输入40
(1)40进入函数,判40在哪个区间循环得出40在这个区间13=27/2<N<=81/2=40
则27将做为left用来除40取余数的,
(2)求40的余数mod_next_m=m%left得到余数mod_next_m为13;
其次判断后面的符号,ch=(m>left?'+':'-') 在13到27符号为负,27到40之间符号为正
之后判上一步sign的正负,因为递归得到的是加了圆括号的结果公式,题目要求去除圆括号
所为sign为正时,这次递归的符号不用改,如果为负,则符号取相反的结果.
把ch里的正负符号送给sign,刷新.为下一次递归做符号判断.
进入第(3)步判断,如果符合则不用进入递归,相反则要进入,进入时对送进的数进入减法
abs(m-left)在这里等于40-27=13,13进入递归分解
再说明,此算法要解决两个问题
(1)对数字N进入分解
(2)数字前的正负符号,对下一次递归符号的取决
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<math.h>
#define MAX 10
int fa[MAX]={1,3,9,27,81,243,729,2187,6561,19683};/*等比数列(砝码)*/
int search(int m){/*搜索数字m是否在上面数组内,是的话返回与m相等所在的数组下标i,否则返回-1*/
int i;
for(i=0;i<MAX;i++)
if(m==fa[i])
return i;
return -1;
}
int gogo(int m,char sign)
{
int i,left,mod_next_m,temp;
bool flag=true;
char ch;
for(i=1;i<MAX;i++)/*判断数字所在的区间*/
if( m>(fa[i]/2) && m<=(fa[i+1]/2) ){
left=fa[i];/*规律得出数字的分解公式中第一个数字*/
break;
}
mod_next_m=m%left;
printf("%d",left);
ch=(m>left?'+':'-');/*正常的符号*/
if(sign=='-'){/*如果他前面的符号为负的话,则去除圆括号后,里面的符号要取相反*/
ch=(ch=='+'?'-':'+');
}
printf("%c",ch);/*输出符号*/
sign=ch;/*为下一步递归前面的符号*/
if( ( i=search(mod_next_m) )>=0 ){/*递归退出条件1*/
printf("%d",fa[i]);
flag=false;
}
if(flag==true){/*递归退出条件2*/
temp=abs(left-m);
i=search(temp);
if(i>=0){
printf("%d",fa[i]);
flag=false;
}
}
if(flag==true){/*如果余数,减去left后的数都不是fa数组中的数则进入递归*/
gogo(abs(m-left),sign);/*进入递归*/
}
return 0;
}
int main(){
int m,i;
char sign='+';
while(scanf("%d",&m)!=EOF){
printf("%d=",m);
if( ( i=search(m) )>=0)
printf("%d",fa);
else
gogo(m,sign);
printf("\n");
}
}
2008-08-20 路灯问题2
大地勇士X
题目描述:
在高速公路上有许许多多的路灯,假设有n个,编号1到n,
控制台也同样有n个开关,只打开第1个开关就所有灯都亮了,
只打开第2个开关就所有编号为2,4,6,8,..,2i,..都亮了,
同时打开第2和第4个开关就2,6,10,14,18,...亮了。
打开了奇数次的灯是亮的,否则就是不亮。
输入:
多组测试数据,每组一行。
每行依次是三个数n,a,b(1 <= n <= 1e9 , 1 <= a,b <=n ),
输出:
对每组测试数据输出一个数:
当操作人员把这n个开关都打开的时候,
输出路灯a和路灯b之间有多少灯是亮着的。
样例输入:
5 1 5
10 3 6
样例输出:
2
1
提示:
不要想的太复杂了
难度:Very Easy
所花时间共2.5个小时
算法思路:(最笨的想法)
(1)题中的n表示按顺序打开n个开关,如n=5 则按1 2 3 4 5打开
(2)第1个开关,打开所有的路灯,之后第2个开关打开了2,4,6,8,10,....2*i(i属于自然数)编号的灯
所以第3个开关,打开了3*i(i属于自然数)编号的灯,但开关是按顺序打开的
所以开关一开一关,灯就一亮一暗;
打开了奇数次的灯是亮的,否则就是不亮;
第一次情况,在下面程序中会打印出来;
(3)最后统计在a和b之间亮了的灯
程序应用动态分配数组
即分配(b-a+1)个int型内存空间,分配完后会释放;
(因为申请了内存空间后,用指针指向内存的首地址可以当数组用)
所为从0至(b-a+1)分别用来存在a~b灯每次触到的次数
#include <stdio.h>
#include<stdlib.h>
int main()
{
int n, a, b,i=0,j=0,*s,count;
int low;
while(scanf("%d%d%d", &n, &a, &b)!=EOF)
{
count=0;
if(a>b)
{
i=a;
a=b;
b=i;
}
s=(int*)malloc( (b-a+1)*sizeof(int) );/*分配内存空间,大小为a,b之间的数*/
if(s==NULL){
printf("error!");
return 0;
}
for(i=0;i<(b-a+1);i++) s[i]=0;/*数组要初始化为零*/
for(low=a;low<=b;low++) printf(" %d ",low);/*输出a到b之间的数*/
putchar('\n');
for(i=1;i<=n;i++){/*开关的次数和次序*/
j=0;
low=a;/*第次要从a开始*/
while(low<=b){
if(low%i==0) s[j]++;/*累计次数*/
low++;
j++;
}
if(i>b) break;/*有可能第n次的倍数不影响到小于b编号的灯,所以退出*/
for(j=0;j<(b-a+1);j++){/*第次打印数组中的情况*/
printf(" %d ",s[j]);
}
printf("\n");
}
for(i=0;i<(b-a+1);i++)/*奇数次的灯是亮的,否则就是不亮。*/
if(s%2==1) count++;
free(s);
printf("%d\n",count);
}
return 0;
}
}
别人的高级算法
#define CP_GCC
#include <stdio.h>
#include <math.h>
int main()
{
int n, a, b, t;
while(scanf("%d%d%d", &n, &a, &b)!=EOF)
{
if(a>b)
{
t=a;
a=b;
b=t;
}
printf("%d\n", (int)sqrt((double)b)-(int)ceil(sqrt((double)a))+1);
}
return 0;
}
2008-08-20 [分享]螺旋数字方阵(1)
大地勇士X
#include<stdio.h>
#include<stdlib.h>
/*程序功能:螺旋数字方阵
*程序思路:初始化为0,设置四个方向,0(上),1(右),2(下),3(左);
*当触边或者遇见非0时候就改变方向,同时设置一个计数器,控制跳出 。
*花费时间 $<5>$hour
*/
int switch_dis(int *p,int *q,int k)/*方向控制*/
{
switch(k){
case 0:(*p)--;break;
case 1:(*q)++;break;
case 2:(*p)++;break;
case 3:(*q)--;break;
}
return 0;
}
int main(){
int count,x,y,a[100][100];
int i,j,k,n,m,fx;
printf("input x y and fx (x<=100,y<=100)(x=0 or y=0 exit)\n");
while(scanf("%d%d%d",&x,&y,&fx)==3){
if(x==0||y==0){
printf("Bye bye!");
break;
}
for(i=0;i<x;i++)
for(j=0;j<y;j++)
a[i][j]=0;
if(!fx)
k=1;
if(fx)
k=2;
i=j=0;
a[i][j]=1;
for(count=2;count<=x*y;count++){
switch_dis(&i,&j,k);
if(fx==0){/*顺时针*/
if(k==0&&a[i][j]!=0){/*转弯条件*/
k=1;
i=n;
j=m;
switch_dis(&i,&j,k);
}
if( k==1&&(j==y||a[i][j]!=0) ){
k=2;
i=n;
j=m;
switch_dis(&i,&j,k);
}
if( k==2&&(i==x||a[i][j]!=0) ){
k=3;
i=n;
j=m;
switch_dis(&i,&j,k);
}
if( k==3&&(j<0||a[i][j]!=0) ){
k=0;
i=n;
j=m;
switch_dis(&i,&j,k);
}
}
/*逆时针*/
if(fx==1){
if(k==0&&a[i][j]!=0){/*转弯条件*/
k=3;
i=n;
j=m;
switch_dis(&i,&j,k);
}
if( k==1&&(j==y||a[i][j]!=0) ){
k=0;
i=n;
j=m;
switch_dis(&i,&j,k);
}
if( k==2&&(i==x||a[i][j]!=0) ){
k=1;
i=n;
j=m;
switch_dis(&i,&j,k);
}
if( k==3&&(j<0||a[i][j]!=0) ){
k=2;
i=n;
j=m;
switch_dis(&i,&j,k);
}
}
n=i;/**/
m=j;
a[i][j]=count;
}
for(i=0;i<x;i++){
for(j=0;j<y;j++)
printf("%4d",a[j]);
printf("\n");
}
}
system("pause");
return 0;
}
2008-08-20 北京刻章办证1336611268
北京丰台刻章办证13...
2008-08-20 卡布列克运算的验证程序
大地勇士X
函数 vr6174 是对卡布列克运算的验证程序。
所谓卡布列克运算,是指任意一个四位数,只要它们各个位上的数字不全相同,就有这样的规律:
(1)把组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
(2)把组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数( 如果四个数字中含有 0,则此数不足四位 );
(3)求出以上两数之差,得到一个新的四位数。
重复以上过程,总能得到最后的结果是 6174。
如果当 n=5346 时调用 vr6174(n),便会输出以下结果:
6543-3456=3087 8730-378=8352 8532-2358=6174
函数 vr6174 采用了递归算法,并调用 parse_sort 和 max_min 函数。其中 parse_sort 函数把所给的四位数分解为四个一位数字,并将其从小到大排序,放入数组 each;max_min 函数根据 each 的值形成所要求的最大四位数和最小四位数。
#include<stdio.h>
#include<stdlib.h>
int pow10_int(int n)/*求10的N次方的函数*/
{
int sum=1;
for(int i=0;i<n;i++)
sum=sum*10;
return sum;
}
void parse_sort(int each[],int num,int count)/*把num分解各个位上的数后存入数组each[]中*/
{
int m=0,a[10]={0};
int i=0,j=0;
while(num!=0){/*分解数num*/
m=num%10;
num=num/10;
++a[m];/*用的下标表示num中的数,并且计数*/
}
for(i=0;i<count;i++){/*升序存入数组each[i]中*/
while(!a[j]) j++;
each[i]=j;
a[j]--;
}
}
int minD(int each[],int count)/*求数组each[i]中的最大数*/
{
int sum=0,i;
for(i=0;i<count;i++)
sum+=each[i]*pow10_int( (count-1-i) );
return sum;
}
int maxD(int each[],int count)/*求数组each[i]中的最小数*/
{
int sum=0,i;
for(i=0;i<count;i++)
sum=sum+each*pow10_int(i);
return sum;
}
int main(){
int number,count;
int *each;
scanf("%d%d",&number,&count);
each=(int*)malloc(count*sizeof(int));
if(NULL==each){
printf("error\n");
return 0;
}
parse_sort(each,number,count);
while(1){
parse_sort(each,number,count);
number=maxD(each,count)-minD(each,count);
if(6174==number) break;
}
printf("YES\n");
system("pause");
return 0;
}


