锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
1.1 Names
A name should be informative, concise, memorable, and pronounceable if possible.
* Use descriptive names for globals, short names for locals.
Global variables need names long enough and descriptive enough to remind the reader of their meaning.
It's also helpful to include a brief comment with the declaration of each global.
The longer the program, the more important is the choice of good, descriptive, systematic names.
* Be consistent.
Give related things related names that show their relationship and high-light their difference.
* Use active names for functions.
* Be accurate.
1.2 Expressions and Statements
* Indent to show structure.
A consistent indentation style is the lowest-energy way to make a program's structure self-evident.
* Use the natural form of expressions.
Write expressions as you might speak them aloud.
* Parenthesize to resolve ambiguity.
* Break up complex expressions.
* Be clear.
the goal is to write clear code, not clever code.
* Be careful with side effects.
1.3 Consistency and Idioms
* Use a consistent indentation and brace style.
* Use idioms for consistency.
A central part of learning any language is developing a familiarity with its idioms.
* Use else-ifs for multi-way decisions.
1.4 Function Macros
* Avoid function macros.
* Parenthesize the macro body and arguments.
In C++, inline functions avoid the syntactic trouble while offering whatever performance advantage macros might provide.
They are appropriate for short functions that set or retrieve a single value.
1.5 Magic Numbers
Magic numbers are the constants, array sizes, character positions, conversion factors, and other literal numric values that appear in programs.
* Given names to magic numbers.
* Define numbers as constants, not macros.
The C preprocessor is a powerful but blunt tool, however, and macros are a dangerous way to program because they change the lexical structure of the program underfoot. Let the language proper do the work.
* Use character constants, not integers.
* Use the language to calculate the size of an object.
1.6 Comments
* Don't belabor the obvious.
* Comment functions and global data.
* Don't comment bad code, rewrite it.
* Don't contradict the code.
* Clarify,don't confuse.
1.7 Why bother?
The main concerns of programming style: descriptive names, clearity in expressions, straightforward control flow, readability of code and comments, and the importance of consistence use of conventions and idioms in achieving all of these.
Well-written code is easier to read and to understand, almost surely has fewer errors, and is likely to be smaller than code that has been carelessly tossed together and never polished.
The key observation is that good style should be a matter of habit.
Once they become automatic, your subconscious will take care of many of the details for you, and even the code you produce under pressure will be better.
紼嬪簭璁捐瀹炶返 - 絎?绔?/span>
1. 椋庢牸
1.1 鍚嶅瓧
涓涓悕瀛楀簲璇ユ槸闈炲艦寮忕殑銆佺畝緇冪殑銆佸鏄撹蹇嗙殑錛屽鏋滃彲鑳界殑璇濓紝鏈濂芥槸鑳藉鎷艱鐨勩?/span>
* 鍏ㄥ眬鍙橀噺浣跨敤鍏鋒湁璇存槑鎬х殑鍚嶅瓧錛屽眬閮ㄥ彉閲忕敤鐭悕瀛椼?/span>
鍏ㄥ眬鍙橀噺鐨勫悕瀛楀簲璇ヨ凍澶熼暱錛屽叿鏈夎凍澶熺殑璇存槑鎬с傜粰姣忎釜鍏ㄥ眬鍙橀噺澹版槑闄勪竴涓畝鐭敞閲婁篃闈炲父鏈夊府鍔┿?/span>
瀵逛簬闀跨殑紼嬪簭錛岄夋嫨閭d簺濂界殑銆佸叿鏈夎鏄庢х殑銆佺郴緇熷寲鐨勫悕瀛楀氨鏇村姞閲嶈銆?/span>
* 淇濇寔涓鑷存с?/span>
* 鍑芥暟閲囩敤鍔ㄤ綔鎬у悕瀛椼?/span>
* 瑕佸噯紜傚悕瀛椾笌鍏跺疄鐜頒繚鎸佸噯紜殑瀵瑰簲銆?/span>
1.2 琛ㄨ揪寮忓拰璇彞
* 鐢ㄧ緝琛屾樉紺虹▼搴忕殑緇撴瀯銆?/span>
閲囩敤涓縐嶄竴鑷寸殑緙╄椋庢牸錛屾槸浣跨▼搴忓憟鐜板嚭緇撴瀯娓呮櫚鐨勬渶鐪佸姏鐨勬柟娉曘?/span>
* 浣跨敤琛ㄨ揪寮忕殑鑷劧褰㈠紡銆?/span>
琛ㄨ揪寮忓簲璇ュ啓寰椾綘鑳藉ぇ澹板康鍑烘潵銆?/span>
* 鐢ㄥ姞鎷彿鐨勬柟寮忔帓闄や簩涔夋с?/span>
* 鍒嗚В澶嶆潅鐨勮〃杈懼紡銆?/span>
* 瑕佹竻鏅般?/span>
鐩爣搴旇鏄啓鍑烘渶娓呮櫚鐨勪唬鐮侊紝鑰屼笉鏄渶宸у鐨勪唬鐮併?/span>
* 灝忓績鍓綔鐢ㄣ?/span>
鍍?/span>++榪欎竴綾昏繍綆楃鍏鋒湁鍓綔鐢紝瀹冧滑闄や簡榪斿洖涓涓煎錛岃繕灝嗛殣鍚湴鏀瑰彉鍙橀噺鐨勫箋?/span>
1.3 涓鑷存у拰涔?fàn)鎯敤娉?/span>
* 浣跨敤涓鑷寸殑緙╂帓鍜屽姞鎷彿椋庢牸銆?/span>
濡傛灉浣犲伐浣滃湪涓涓笉鏄嚜宸卞啓鐨勭▼搴忎笂錛岃娉ㄦ剰淇濈暀紼嬪簭鍘熸湁鐨勯鏍箋?/span>
* 涓轟簡涓鑷存э紝浣跨敤涔?fàn)鎯敤娉曘?/span>
鍦ㄥ涔?fàn)涓涓璦鐨勮繃紼嬩腑錛屼竴涓腑蹇冮棶棰樺氨鏄愭笎鐔熸?zhèn)夊畠鐨勪範(fàn)鎯敤娉曘?/span>
-----------------------------------------------
甯歌涔?fàn)鎯敤娉曚箣涓鏄驚鐜殑褰㈠紡銆?/span>
渚嬪錛?/span>
for(i = 0; i < n; i++)
array[i] = 1.0;
C++鎴?/span>Java閲屽父瑙佺殑鍙︿竴縐嶅艦寮忔槸鎶婂驚鐜彉閲忕殑澹版槑涔熷寘鎷湪鍐咃細(xì)
for(int i = 0; i < n; i++)
array[i] = 1.0;
-----------------------------------------------
涓嬮潰鏄?/span>C璇█鎵弿涓涓摼琛ㄧ殑鏍囧噯寰幆錛?/span>
for(p = list; p != NULL; p = p->next)
...
-----------------------------------------------
鏃犵┓寰幆錛?/span>
for( ;; )
...
鎴?/span>
while(1)
...
-----------------------------------------------
甯歌鐨勫彟涓涓儻鐢ㄦ硶鏄妸涓涓祴鍊兼斁榪涘驚鐜潯浠墮噷錛?/span>
while( (c = getchar()) != EOF)
putchar(c);
-----------------------------------------------
涓涓笉濂界殑渚嬪瓙錛?/span>
char *p, buf[256];
gets(buf);
p = malloc(strlen(buf));
strcpy(p, buf);
闂1.
緇濅笉瑕佷嬌鐢ㄥ嚱鏁?/span>gets錛屽洜涓轟綘娌″姙娉曢檺鍒跺畠鐢辮緭鍏ラ偅鍎胯鍏ュ唴瀹圭殑鏁伴噺銆傝繖甯稿父浼?xì)瀵艰嚧涓涓畨鍏ㄦч棶棰樸?/span>
闂2.
榪樻湁鍙︿竴涓棶棰橈細(xì)strlen姹傚嚭鐨勫兼病鏈夎鍏ヤ覆緇撳熬鐨?/span>'\0'瀛楃錛岃?/span>strcpy鍗村皢澶嶅埗瀹冦?/span>
涔?fàn)鎯啓娉曟槸锛?xì)
p = malloc(strlen(buf)+1);
strcpy(p, buf);
鎴栧湪C++閲岋細(xì)
p = new char[strlen(buf)+1];
strcpy(p , buf);
濡傛灉榪欓噷娌℃湁+1錛屽氨瑕佸綋蹇冦?/span>
strdup鍙互浣塊伩鍏嶄笂榪伴敊璇彉寰楁洿綆鍗曘傚彲鎯?/span>strdup涓嶆槸ANSI C鏍囧噯涓殑鍐呭銆?/span>
闂3.
涓婇潰涓や釜鐗堟湰閮芥病鏈夋鏌?/span>malloc鐨勮繑鍥炲箋?/span>
鍦ㄥ疄闄呯▼搴忎腑錛屽浜?/span>malloc銆?/span>realloc銆?/span>strdup鍙?qiáng)鋼Q浣曠壍娑夊埌瀛樺偍鍒嗛厤鐨勫嚱鏁幫紝瀹冧滑鐨勮繑鍥炲奸兘蹇呴』鍋氭鏌ャ?/span>
-----------------------------------------------
* 鐢?/span>else-if琛ㄨ揪澶氳礬閫夋嫨銆?/span>
澶氳礬閫夋嫨鐨勪範(fàn)鎯〃紺烘硶褰㈠紡濡備笅錛?/span>
if (condition1)
statement1
else if (condition2)
statement2
...
else if (conditionn)
statementn
else
default-statement
1.4 鍑芥暟瀹?/span>
* 閬垮厤浣跨敤鍑芥暟瀹忋?/span>
鍑芥暟瀹忔渶甯歌鐨勪竴涓弗閲嶉棶棰樻槸錛氬鏋滀竴涓弬鏁板湪瀹氫箟涓嚭鐜板嬈★紝瀹冨氨鍙兘琚嬈℃眰鍊箋?/span>
濡傛灉璋冪敤鏃剁殑瀹為檯鍙傛暟甯︽湁鍓綔鐢紝緇撴灉灝卞彲鑳戒駭鐢熶竴涓毦浠ユ崏鎽哥殑閿欒銆?/span>
渚嬪瓙錛?/span>
鏌?/span><ctype.h>涓細(xì)
#define isupper(c) ((c) >= 'A' && (c) <= 'Z')
濡傛灉榪欐牱璋冪敤
while (isupper(c = getchar())),
涓ゆ杈撳叆鐨勫瓧絎?/span>c琚垎鍒笌'A'鍜?/span>'Z'姣旇緝浜嗐?/span>
C璇█鏍囧噯鍏佽灝?/span>isupper鍙?qiáng)绫讳技鍑芥暟瀹氫箟湄?fù)瀹忥紝浣嗚姹備繚璇佸畠浠殑鍙傛暟鍙眰鍊間竴嬈°?/span>
濡傛灉甯屾湜鏇村畨鍏ㄤ簺錛岄偅涔堝氨涓瀹氫笉瑕佸祵濂楀湴浣跨敤鍍?/span>getchar榪欑甯︽湁鍓綔鐢ㄧ殑鍑芥暟銆?/span>
鏀瑰啓濡備笅錛?/span>
while ((c = getchar()) != EOF && isupper(c))
鏈夋椂澶氭姹傚煎甫鏉ョ殑鏄墽琛屾晥鐜囬棶棰橈紝鑰屼笉鏄湡姝g殑閿欒銆?/span>
* 緇欏畯鐨勪綋鍜屽弬鏁伴兘鍔犱笂鎷彿銆?/span>
濡傛灉涓涓搷浣滄瘮杈冨鏉傦紝鎴栬呭畠寰堝叿涓鑸э紝鍊煎緱鍖呰璧鋒潵錛岄偅涔堣繕鏄簲璇ヤ嬌鐢ㄥ嚱鏁般?/span>
C++鎻愪緵鐨?/span>inline鍑芥暟鏃㈤伩鍏嶄簡璇硶鏂歸潰鐨勯夯鐑?chǔ)锛岃屼笖鍙堝彲寰楀埌瀹忚兘澶熸彁渚涚殑鎵ц鏁堢巼錛屽緢閫傚悎鏉ュ畾涔夐偅浜涜緗垨鑰呮彁鍙栦竴涓肩殑鐭俊鍑芥暟銆?/span>
1.5 紲炵鐨勬暟 錛堢炕璇戠殑鏈夌偣...錛?/span>
紲炵鐨勬暟鍖呮嫭鍚勭甯告暟銆佹暟緇勭殑澶у皬銆佸瓧絎︿綅緗佸彉鎹㈠洜瀛愪互鍙?qiáng)绋嬪簭涓嚭鐜扮殑鍏朵粬浠ユ枃瀛楀舰寮忓啓鍑虹殑鏁板箋?/span>
* 緇欑縐樼殑鏁拌搗涓悕瀛椼?/span>
* 鎶婃暟瀹氫箟涓哄父鏁幫紝涓嶈瀹氫箟涓哄畯銆?/span>
C璇█棰勫鐞嗙▼搴忔槸涓涓己鏈夊姏鐨勫伐鍏鳳紝浣嗘槸瀹冨張鏈変簺椴佽幗銆?/span>
浣跨敤瀹忚繘琛岀紪紼嬫槸涓縐嶅緢鍗遍櫓鐨勬柟寮忥紝鍥犱負(fù)瀹忎細(xì)鍦ㄨ儗鍦伴噷鏀瑰彉紼嬪簭鐨勮瘝娉曠粨鏋勩傛垜浠簲璇ヨ璇硶鍘誨仛姝g‘鐨勫伐浣溿?/span>
錛堣瘧鑰呮敞錛氶澶勭悊鍛戒護(hù)涓嶆槸C璇█鏈韓鐨勭粍鎴愰儴鍒嗭紝鑰屾槸涓緇勮緟鍔╂垚鍒嗐傝繖閲岃"璁╄璦..."錛屼篃灝辨槸璇翠笉瑕佺敤棰勫鐞嗗懡浠ゅ仛銆傦級
* 浣跨敤瀛楃褰㈠紡鐨勫父閲忥紝涓嶈鐢ㄦ暣鏁般?/span>
渚嬪瓙錛?/span>
if (c >= 65 && c <= 90)
...
榪欑鍐欐硶瀹屽叏渚濊禆浜庣壒孌婄殑瀛楃琛ㄧず鏂瑰紡銆?/span>
榪欐牱鍐欐洿濂戒簺錛?/span>
if (c >= 'A' && c <= 'Z')
...
浣嗘槸錛屽鏋滃湪鏌愪釜緙栫爜瀛楃闆嗛噷鐨勫瓧姣嶇紪鐮佷笉鏄繛緇殑錛屾垨澶規(guī)湁鍏朵粬瀛楁瘝錛岄偅涔堣繖縐嶆弿榪板氨鏄敊鐨勩?/span>
鏈濂芥槸鐩存帴浣跨敤搴撳嚱鏁般?/span>
if(isupper(c))
...
-----------------------------------------------
紼嬪簭閲岃澶氫笂涓嬫枃涓粡甯稿嚭鐜扮殑0銆傚鏋滄垜浠妸姣忎釜0鐨勭被鍨嬪啓寰楁洿鏄庣‘鏇存竻妤氾紝瀵硅紼嬪簭鐨勪漢鐞嗚В鍏朵綔鐢ㄦ槸寰堟湁甯姪鐨勩?/span>
渚嬪錛岀敤 (void*)0 鎴?/span> NULL 琛ㄧずC閲岀殑絀烘寚閽堝鹼紝鐢?/span>'\0'鑰屼笉鏄?/span>0琛ㄧず瀛楃涓茬粨灝劇殑絀哄瓧鑺傘?/span>
鐒惰屽湪C++閲屼漢浠兘宸茬粡鎺ュ彈浜嗙敤0錛堣屼笉鏄?/span>NULL錛夎〃紺虹┖鎸囬拡銆?/span>Java閲屽垯瀹氫箟浜嗗叧閿瓧null銆?/span>
* 鍒╃敤璇█鍘昏綆楀璞$殑澶у皬銆?/span>
涓嶈瀵逛換浣曟暟鎹被鍨嬩嬌鐢ㄦ樉寮忓啓鍑烘潵鐨勫ぇ灝忋?/span>
渚嬶細(xì)
char buf[1024];
fgets(buf, sizeof(buf), stdin);
瀵逛簬閭d簺鍙互鐪嬫竻妤氱殑鏁扮粍錛堜笉鏄寚閽堬級錛屼笅闈㈢殑瀹忓畾涔夎兘璁$畻鍑烘暟緇勭殑鍏冪礌涓暟錛?/span>
#define NELEMS(array) (sizeof(array) / sizeof(array[0]))
1.6 娉ㄩ噴
* 涓嶈澶ц皥鏄庢樉鐨勪笢瑗褲?/span>
娉ㄩ噴搴旇鎻愪緵閭d簺涓嶈兘涓涓嬪瓙浠庝唬鐮佷腑鐪嬪埌鐨勪笢瑗匡紝鎴栬呮妸閭d簺鏁e竷鍦ㄨ澶氫唬鐮侀噷鐨勪俊鎭敹闆嗗埌涓璧楓?/span>
* 緇欏嚱鏁板拰鍏ㄥ眬鏁版嵁鍔犳敞閲娿?/span>
* 涓嶈娉ㄩ噴宸殑浠g爜錛岄噸鍐欏畠銆?/span>
* 涓嶈涓庝唬鐮佺煕鐩俱?/span>
褰撲綘鏀瑰彉浠g爜鏃訛紝涓瀹氳娉ㄦ剰淇濊瘉鍏朵腑鐨勬敞閲婃槸鍑嗙‘鐨勩?/span>
* 婢勬竻鎯呭喌錛屼笉瑕佹坊涔便?/span>
娉ㄩ噴搴旇鍦ㄥ洶闅劇殑鍦版柟灝介噺甯姪璇昏咃紝鑰屼笉鏄粰浠栦滑璁劇疆闅滅銆?/span>
娉ㄩ噴寰堥噸瑕侊紝浣嗘槸涔熶笉蹇呯洸鐩敞閲娿?/span>
娉ㄩ噴鏄竴縐嶅伐鍏鳳紝瀹冪殑浣滅敤灝辨槸甯姪璇昏呯悊瑙g▼搴忎腑鐨勬煇浜涢儴鍒嗭紝鑰岃繖浜涢儴鍒嗙殑鎰忎箟涓嶅鏄撻氳繃浠g爜鏈韓鐩存帴鐪嬪埌銆?/span>
1.7 涓轟綍瀵規(guī)璐瑰績
娉ㄩ噸紼嬪簭璁捐鐨勯鏍鹼細(xì)鍏鋒湁璇存槑鎬х殑鍚嶅瓧銆佹竻鏅扮殑琛ㄨ揪寮忋佺洿鎴簡褰撶殑鎺у埗嫻併佸彲璇葷殑浠g爜鍜屾敞閲婏紝浠ュ強(qiáng)鍦ㄨ拷姹傝繖浜涘唴瀹規(guī)椂涓鑷村湴浣跨敤鏌愪簺瑙勫垯鍜屾儻鐢ㄦ硶鐨勯噸瑕佹с?/span>
涔﹀啓鑹ソ鐨勪唬鐮佹洿瀹規(guī)槗闃呰鍜岀悊瑙o紝鍑犱箮鍙互淇濊瘉鍏朵腑鐨勯敊璇洿灝戙?/span>
濂介鏍煎簲璇ユ垚涓轟竴縐嶄範(fàn)鎯?/span>
涓鏃﹁繖縐嶄範(fàn)鎯彉鎴愯嚜鍔ㄧ殑涓滆タ錛屼綘鐨勬綔鎰忚瘑灝變細(xì)甯姪浣犵収鏂欒澶氱粏鑺傞棶棰橈紝鐢氳嚦浣犲湪宸ヤ綔鍘嬪姏涓嬪啓鍑虹殑浠g爜涔熶細(xì)鏇村ソ銆?/span>
銆銆iostream涓哄唴緗被鍨嬬被鍨嬪璞℃彁渚涗簡杈撳叆杈撳嚭鏀寔錛屽悓鏃朵篃鏀寔鏂囦歡鐨勮緭鍏ヨ緭鍑猴紝綾葷殑璁捐鑰呭彲浠ラ氳繃瀵筰ostream搴? 鐨勬墿灞曪紝鏉ユ敮鎸佽嚜瀹氫箟綾誨瀷鐨勮緭鍏ヨ緭鍑烘搷浣溿?
銆銆涓轟粈涔堣瑕佹墿灞曟墠鑳芥彁渚涙敮鎸佸憿錛熸垜浠潵涓涓ず渚嬨?%CODE{"cpp"}% #include
<stdio.h> #include
class Test { public: Test(int a=0,int b=0) { Test::a=a; Test::b=b; } int a; int b; }; int main() { Test t(100,50); printf("%???",t);//涓嶆槑紜殑杈撳嚭鏍煎紡 scanf("%???",t);//涓嶆槑紜殑杈撳叆鏍煎紡 cout<<t<<endl;//鍚屾牱涓嶅鏄庣‘ cin>>t;//鍚屾牱涓嶅鏄庣‘ system("pause"); } %ENDCODE% 鐢變簬鑷畾涔夌被鐨勭壒孌婃э紝鍦ㄤ笂闈㈢殑浠g爜涓紝鏃犺浣犱嬌鐢╟椋庢牸鐨勮緭鍏ヨ緭鍑猴紝鎴栬呮槸c++鐨勮緭鍏ヨ緭鍑洪兘涓嶆槸涓嶆槑紜殑涓涓〃紺猴紝鐢變簬c璇█娌℃湁榪愮畻絎﹂噸杞芥満 鍒訛紝瀵艱嚧stdio搴撶殑涓嶅彲鎵╁厖鎬э紝璁╂垜浠棤娉曡printf()鍜宻canf()鏀寔瀵硅嚜瀹氫箟綾誨璞$殑鎵╁厖璇嗗埆錛岃宑++鏄彲浠ラ氳繃榪愮畻絎﹂噸杞芥満鍒舵墿鍏? iostream搴撶殑錛屼嬌緋葷粺鑳借兘澶熻瘑鍒嚜瀹氫箟綾誨瀷錛屼粠鑰岃杈撳叆杈撳嚭鏄庣‘鐨勭煡閬撲粬浠騫蹭粈涔堬紝鏍煎紡鏄粈涔堛?
銆銆鍦ㄤ笂渚嬩腑鎴戜滑涔嬫墍浠ョ敤printf涓巆out榪涜瀵規(guī)瘮鐩殑鏄負(fù)浜嗗憡璇夊ぇ瀹訛紝C涓嶤++澶勭悊杈撳叆杈撳嚭鐨勬牴鏈笉鍚岋紝鎴戜滑浠巆榪滅殑杈? 鍏ヨ緭鍑哄彲浠ュ緢鏄庢樉鐪嬪嚭鏄嚱鏁拌皟鐢ㄦ柟寮忥紝鑰宑++鐨勫垯鏄璞℃ā寮忥紝cout鍜宑in鏄痮stream綾誨拰istream綾葷殑瀵硅薄銆?
| IOSstream 搴? | |
|---|---|
| fstream | iomainip |
| ios | iosfwd |
| iostream | istream |
| ostream | sstream |
| streambuf | strstream |
銆銆鎴戜滑鎵鐔熸?zhèn)夌殑杈撳叆杈撳嚭鎿嶄綔鍒嗗埆鏄敱istream(杈撳叆嫻?鍜宱stream(杈撳嚭嫻?榪欎袱涓被鎻愪緵鐨勶紝涓轟簡鍏佽鍙屽悜鐨勮緭鍏ワ紡 杈撳嚭錛岀敱istream鍜宱stream媧劇敓鍑轟簡iostream綾匯?
銆銆綾葷殑緇ф壙鍏崇郴瑙佷笅鍥撅細(xì)
iostream搴撳畾涔変簡浠ヤ笅涓変釜鏍囧噯嫻佸璞★細(xì)
銆銆杈撳嚭涓昏鐢遍噸杞界殑宸︾Щ鎿嶄綔絎︼紙<<錛夋潵瀹屾垚錛岃緭鍏ヤ富瑕佺敱閲嶈澆鐨勫彸縐繪搷浣滅(>>)瀹屾垚:
銆銆榪欎簺鏍囧噯鐨勬祦瀵硅薄閮芥湁榛樿鐨勬墍瀵瑰簲鐨勮澶囷紝瑙佷笅琛細(xì)
| C++瀵硅薄鍚?/u> | 璁懼鍚嶇О | C涓爣鍑嗚澶囧悕 | 榛樿鍚箟 |
|---|---|---|---|
| cin | 閿洏 | stdin | 鏍囧噯杈撳叆 |
| cout | 鏄劇ず鍣ㄥ睆騫? | stdout | 鏍囧噯杈撳嚭 |
| cerr | 鏄劇ず鍣ㄥ睆騫? | stderr | 鏍囧噯閿欒杈撳嚭 |
銆銆閭d箞鍘熺悊涓婏跡++鏈夋槸濡備綍鍒╃敤cin錛廲out瀵硅薄涓庡乏縐誨拰鍙崇Щ榪愮畻絎﹂噸杞芥潵瀹炵幇杈撳叆杈撳嚭鐨勫憿錛?
銆銆涓嬮潰鎴戜滑浠ヨ緭鍑轟負(fù)渚嬶紝璇存槑鍏跺疄鐜板師鐞嗭細(xì)
銆銆涓鍙ヨ緭鍑鴻鍙ワ細(xì)cout<<"www.cndev-lab.com"錛涳紝浜嬪疄涓婅皟鐢ㄧ殑灝辨槸 ostream& operator<<(ostream &temp,char *ps);榪欎釜榪愮畻絎﹂噸杞藉嚱鏁幫紝鐢變簬榪斿洖鐨勬槸嫻佸璞$殑寮曠敤錛屽紩鐢ㄥ彲浠ヤ綔涓哄乏鍊間嬌鐢紝鎵浠ュ綋紼嬪簭涓湁綾諱技cout<<"www.cndev- lab.com"<<"涓浗杞歡寮鍙戝疄楠屽";榪欐牱鐨勮鍙ュ嚭鐜扮殑鏃跺欙紝灝辮兘澶熸瀯鎴愯繛緇緭鍑恒?
銆銆鐢變簬iostream搴撲笉鍏夋敮鎸佸璞$殑杈撳叆杈撳嚭錛屽悓鏃朵篃鏀寔鏂囦歡嫻佺殑杈撳叆杈撳嚭錛屾墍浠ュ湪璇︾粏璁茶В宸︾Щ涓庡彸縐昏繍綆楃閲嶈澆鍙墠錛屾垜浠? 鏈夊繀瑕佸厛瀵規(guī)枃浠剁殑杈撳叆杈撳嚭浠ュ強(qiáng)杈撳叆杈撳嚭鐨勬帶鍒剁鏈夋墍浜嗚В銆?
鐢變簬鏂囦歡璁懼騫朵笉鍍忔樉紺哄櫒灞忓箷涓庨敭鐩橀偅鏍鋒槸鏍囧噯榛樿璁懼錛屾墍浠ュ畠鍦╢stream.h澶存枃浠朵腑鏄病鏈夊儚cout閭f牱棰勫厛瀹氫箟鐨勫叏灞 瀵硅薄錛屾墍浠ユ垜浠繀欏昏嚜宸卞畾涔変竴涓綾葷殑瀵硅薄錛屾垜浠浠ユ枃浠朵綔涓鴻澶囧悜鏂囦歡杈撳嚭淇℃伅(涔熷氨鏄悜鏂囦歡鍐欐暟鎹?錛岄偅涔堝氨搴旇浣跨敤ofstream綾匯?
銆銆ofstream綾葷殑榛樿鏋勯犲嚱鏁板師褰負(fù)錛?%CODE{"cpp"}% ofstream::ofstream(const char *filename,int mode = ios::out,int openprot = filebuf::openprot); %ENDCODE%
銆銆鍏朵腑mode鍜宱penprot榪欎袱涓弬鏁扮殑鍙夐」琛ㄨ涓嬭〃錛?
| mode 灞炴ц〃 | |
| ios::app | 浠ヨ拷鍔犵殑鏂瑰紡鎵撳紑鏂囦歡 |
| ios::ate | 鏂囦歡鎵撳紑鍚庡畾浣嶅埌鏂囦歡灝撅紝ios:app灝卞寘鍚湁姝ゅ睘鎬? |
| ios::binary | 浠ヤ簩榪涘埗鏂瑰紡鎵撳紑鏂囦歡錛岀己鐪佺殑鏂瑰紡鏄枃鏈柟寮忋備袱縐嶆柟寮忕殑鍖哄埆瑙佸墠鏂? |
| ios::in | 鏂囦歡浠ヨ緭鍏ユ柟寮忔墦寮 |
| ios::out | 鏂囦歡浠ヨ緭鍑烘柟寮忔墦寮 |
| ios::trunc | 濡傛灉鏂囦歡瀛樺湪錛屾妸鏂囦歡闀垮害璁句負(fù)0 |
| openprot 灞炴ц〃 | |
| 灞炴? | 鍚箟 |
| 0 | 鏅氭枃浠訛紝鎵撳紑璁塊棶 |
| 1 | 鍙鏂囦歡 |
| 2 | 闅愬惈鏂囦歡 |
| 4 | 緋葷粺鏂囦歡 |
瀹炰緥浠g爜濡備笅錛?%CODE{"cpp"}% #include
int main() { ofstream myfile("c:\\1.txt",ios::out|ios::trunc,0); myfile<<"涓浗杞歡寮鍙戝疄楠屽"<<endl<<"緗戝潃錛?<<"www.cndev- lab.com"; myfile.close() system("pause"); } %ENDCODE% 鏂囦歡浣跨敤瀹屽悗鍙互浣跨敤close鎴愬憳鍑芥暟鍏抽棴鏂囦歡銆?
銆銆ios::app涓鴻拷鍔犳ā寮忥紝鍦ㄤ嬌鐢ㄨ拷鍔犳ā寮忕殑鏃跺欏悓鏃惰繘琛屾枃浠剁姸鎬佺殑鍒ゆ柇鏄竴涓瘮杈冨ソ鐨勪範(fàn)鎯?
銆銆紺轟緥濡備笅錛?
%CODE{"cpp"}% #include
銆銆鍦ㄥ畾涔塱fstream鍜宱fstream綾誨璞$殑鏃跺欙紝鎴戜滑涔熷彲浠ヤ笉鎸囧畾鏂囦歡銆備互鍚庡彲浠ラ氳繃鎴愬憳鍑芥暟open()鏄懼紡鐨勬妸涓 涓枃浠惰繛鎺ュ埌涓涓被瀵硅薄涓娿?
銆銆渚嬪錛?
%CODE{"cpp"}% #include
銆銆浠g爜濡備笅錛?%CODE{"cpp"}% #include
鎴戜滑鍦ㄧ畝鍗曚粙緇嶈繃ofstream綾誨拰ifstream綾誨悗錛屾垜浠啀鏉ョ湅涓涓媐stream綾伙紝fstream綾繪槸鐢? iostream媧劇敓鑰屾潵錛宖stream綾誨璞″彲浠ュ悓瀵規(guī)枃浠惰繘琛岃鍐欐搷浣溿?
銆銆紺轟緥浠g爜濡備笅錛?%CODE{"cpp"}% #include
myfile.open("c:\\1.txt",ios::in,0); if(myfile) { cout<<"鏂囦歡璇婚敊璇?鏂囦歡鍙兘涓㈠け!"<<endl; system("pause"); exit(1); } char ch; while(myfile.get(ch)) { cout.put(ch); } myfile.close(); system("pause"); } %ENDCODE% 鐢變簬fstream綾誨彲浠ュ鏂囦歡鍚屾椂榪涜璇誨啓鎿嶄綔錛屾墍浠ュ瀹冪殑瀵硅薄榪涜鍒濆璇濈殑鏃跺欎竴瀹氳鏄懼紡鐨勬寚瀹歮ode鍜宱penprot鍙傛暟銆?
銆銆鎺ヤ笅鏉ユ垜浠潵瀛︿範(fàn)涓涓嬩覆嫻佺被鐨勫熀紜鐭ヨ瘑錛屼粈涔堝彨涓叉祦綾伙紵
銆銆鎴戜滑鍏堢湅鐪嬬湅C++鏄浣曞C椋庢牸鐨勫瓧絎︿覆嫻佽繘琛屾帶鍒剁殑錛孋涓殑瀛楃涓插叾瀹炰篃灝辨槸瀛楃鏁扮粍錛屽瓧絎︽暟緇勫唴鐨勬暟鎹湪鍐呭瓨涓殑浣嶇疆鐨? 鎺掑垪鏄繛緇殑錛屾垜浠氬父鐢?char str[size]鎴栬卌har *str鐨勬柟寮忓0鏄庡垱寤篊椋庢牸瀛楃鏁扮粍錛屼負(fù)浜嗚兘璁╁瓧絎︽暟緇勪綔涓鴻澶囧茍鎻愪緵杈撳叆杈撳嚭鎿嶄綔錛孋++寮曞叆浜唎strstream銆乮strstream銆? strstream榪欎笁涓被錛岃浣跨敤浠栦滑鍒涘緩瀵硅薄灝卞繀欏誨寘鍚玸trstream.h澶存枃浠躲?
銆銆istrstream綾繪槸浠巌stream錛堣緭鍏ユ祦綾伙級鍜宻trstreambase錛堝瓧絎︿覆嫻佸熀綾伙級媧劇敓鑰? 鏉ワ紝ostrstream鏄粠 ostream錛堣緭鍑烘祦綾伙級鍜宻trstreambase錛堝瓧絎︿覆嫻佸熀綾伙級媧劇敓鑰屾潵錛宻trstream鍒欐槸浠巌ostream(杈撳叆杈撳嚭嫻佺被)鍜屽拰 strstreambase錛堝瓧絎︿覆嫻佸熀綾伙級媧劇敓鑰屾潵銆?
銆銆浠栦滑鐨勭戶鎵垮叧緋誨涓嬪浘鎵紺?
銆銆涓叉祦鍚屾牱涓嶆槸鏍囧噯璁懼錛屼笉浼?xì)鏈夐鍏堝畾涔夊ソ鐨勫叏灞瀵硅薄錛屾墍浠ヤ笉鑳界洿鎺ユ搷浣滐紝闇瑕侀氳繃鏋勯犲嚱鏁板垱寤哄璞°?
綾籭strstream鐨勬瀯閫犲嚱鏁板師褰㈠涓嬶細(xì) %CODE{"cpp"}% istrstream::istrstream(const char *str,int size); %ENDCODE% 鍙傛暟1琛ㄧず瀛楃涓叉暟緇?鑰屽弬鏁?琛ㄧず鏁扮粍澶у皬錛屽綋size涓?鏃訛紝琛ㄧずistrstream綾誨璞$洿鎺ヨ繛鎺ュ埌鐢眘tr鎵鎸囧悜鐨勫唴瀛樼┖闂村茍浠0緇撳熬鐨? 瀛楃涓層?
銆銆涓嬮潰鐨勭ず渚嬩唬鐮佸氨鏄埄鐢╥strstream綾誨垱寤虹被瀵硅薄錛屽埗瀹氭祦杈撳叆璁懼涓哄瓧絎︿覆鏁扮粍錛岄氳繃瀹冨悜涓涓瓧絎﹀瀷瀵硅薄杈撳叆鏁版嵁銆備唬
鐮佸涓嬶細(xì) %CODE{"cpp"}% #include
銆銆鎴戜滑鏉ヤ竴涓ず渚嬩唬鐮侊細(xì) %CODE{"cpp"}% #include
int main() { stringstream ostr("ccc"); ostr.put('d'); ostr.put('e'); ostr<<"fg"; string gstr = ostr.str(); cout<<gstr<<endl;
char a; ostr>>a; cout<<a
system("pause"); } %ENDCODE%
闄ゆ鑰屽錛宻tringstream綾葷殑瀵硅薄鎴戜滑榪樺父鐢ㄥ畠榪涜string涓庡悇縐嶅唴緗被鍨嬫暟鎹箣闂寸殑杞崲銆傜ず渚嬩唬鐮佸涓嬶細(xì)
%CODE{"cpp"}% #include
int main() { stringstream sstr; //--------int杞瑂tring----------- int a=100; string str; sstr<<a; sstr>>str; cout<<str<<endl; //--------string杞琧har[]-------- sstr.clear();//濡傛灉浣犳兂閫氳繃浣跨敤鍚屼竴stringstream瀵硅薄瀹炵幇澶氱綾誨瀷鐨勮漿鎹紝璇鋒敞鎰忓湪姣忎竴嬈¤漿鎹箣鍚庨兘蹇呴』璋冪敤clear() 鎴愬憳鍑芥暟銆?string name = "colinguan"; char cname[200]; sstr<<name; sstr>>cname; cout<<cname; system("pause"); } %ENDCODE% 鎺ヤ笅鏉ユ垜浠潵瀛︿範(fàn)涓涓嬭緭鍏?杈撳嚭鐨勭姸鎬佹爣蹇楃殑鐩稿叧鐭ヨ瘑.
int main() { int a; cin>>a; cout<<cin.rdstate()<<endl; if(cin.rdstate() == ios::goodbit) { cout<<"杈撳叆鏁版嵁鐨勭被鍨嬫紜紝鏃犻敊璇紒"<<endl; } if(cin.rdstate() == ios_base::failbit) { cout<<"杈撳叆鏁版嵁綾誨瀷閿欒錛岄潪鑷村懡閿欒錛屽彲娓呴櫎杈撳叆緙撳啿鍖烘尳鍥烇紒"<<endl; } system("pause"); } %ENDCODE% 銆銆鍙︿竴縐嶆柟娉曞垯鏄嬌鐢ㄤ笅闈換浣曚竴涓嚱鏁版潵媯(gè)嫻嬬浉搴旂殑杈撳叆/杈撳嚭鐘舵侊細(xì) %CODE{"cpp"}% bool bad(); bool eof(); bool fail(); bool good(); %ENDCODE%
銆銆涓嬩緥紺轟緥錛岃〃紺哄嚭浜嗕笂闈㈠悇鎴愬憳鍑芥暟鐨勭敤娉曪細(xì) %CODE{"cpp"}% #include
int main() { int a; cin>>a; cout<<cin.rdstate()<<endl; if(cin.good()) { cout<<"杈撳叆鏁版嵁鐨勭被鍨嬫紜紝鏃犻敊璇紒"<<endl; } if(cin.fail()) { cout<<"杈撳叆鏁版嵁綾誨瀷閿欒錛岄潪鑷村懡閿欒錛屽彲娓呴櫎杈撳叆緙撳啿鍖烘尳鍥烇紒"<<endl; } system("pause"); } %ENDCODE% 濡傛灉閿欒鍙戠敓錛岄偅涔堟祦鐘舵佹棦琚爣璁頒負(fù)閿欒錛屼綘蹇呴』娓呴櫎榪欎簺閿欒鐘舵侊紝浠ヤ嬌浣犵殑紼嬪簭鑳芥紜傚綋鍦扮戶緇繍琛屻傝娓呴櫎閿欒鐘舵侊紝闇浣跨敤clear()鍑芥暟銆? 姝ゅ嚱鏁板甫涓涓弬鏁幫紝瀹冩槸浣犲皢瑕佽涓哄綋鍓嶇姸鎬佺殑鏍囧織鍊箋傦紝鍙灝唅os::goodbit浣滀負(fù)瀹炲弬銆?
銆銆紺轟緥浠g爜濡備笅錛?%CODE{"cpp"}% #include
int main() { int a; cin>>a; cout<<cin.rdstate()<<endl; cin.clear(ios::goodbit); cout<<cin.rdstate()<<endl; system("pause"); } %ENDCODE% 閫氬父褰撴垜浠彂鐜拌緭鍏ユ湁閿欏張闇瑕佹敼姝g殑鏃跺欙紝浣跨敤clear()鏇存敼鏍囪涓烘紜悗錛屽悓鏃朵篃闇瑕佷嬌鐢╣et()鎴愬憳鍑芥暟娓呴櫎杈撳叆緙撳啿鍖猴紝浠ヨ揪鍒伴噸澶嶈緭鍏ョ殑鐩? 鐨勩?
銆銆紺轟緥浠g爜濡備笅錛?%CODE{"cpp"}% #include
int main() { int a; while(1) { cin>>a;
if(cin)//鏉′歡鍙敼鍐欎負(fù)cin.fail() { cout<<"杈撳叆鏈夐敊!璇烽噸鏂拌緭鍏?<<endl;
cin.clear(); cin.get(); } else { cout<<a; break; } }
system("pause"); } %ENDCODE% 銆銆鏈鍚庡啀緇欏嚭涓涓鏂囦歡嫻侀敊璇爣璁板鐞嗙殑渚嬪瓙錛屽琺鍥哄涔?fàn)锛屼唬鐮佸涓嬪Q?
%CODE{"cpp"}% #include
int main() { ifstream myfile("c:\\1.txt",ios_base::in,0); if(myfile.fail()) { cout<<"鏂囦歡璇誨彇澶辮觸鎴栨寚瀹氭枃浠朵笉瀛樺湪!"<<endl; } else { char ch; while(myfile.get(ch)) { cout<<ch; } if(myfile.eof()) { cout<<"鏂囦歡鍐呭宸茬粡鍏ㄩ儴璇誨畬"<<endl; } while(myfile.get(ch)) { cout<<ch; } } system("pause"); } %ENDCODE%
瀵硅繖浜涚被鐨勪竴涓璞℃墍鍋氱殑絎竴涓搷浣滈氬父灝辨槸灝嗗畠鍜屼竴涓湡姝g殑鏂囦歡鑱旂郴璧鋒潵錛屼篃灝辨槸璇存墦寮涓涓枃浠躲傝鎵撳紑鐨勬枃浠跺湪紼嬪簭涓敱涓涓祦瀵硅薄 (stream object)鏉ヨ〃紺?(榪欎簺綾葷殑涓涓疄渚? 錛岃屽榪欎釜嫻佸璞℃墍鍋氱殑浠諱綍杈撳叆杈撳嚭鎿嶄綔瀹為檯灝辨槸瀵硅鏂囦歡鎵鍋氱殑鎿嶄綔銆?/p>
瑕侀氳繃涓涓祦瀵硅薄鎵撳紑涓涓枃浠訛紝鎴戜滑浣跨敤瀹冪殑鎴愬憳鍑芥暟open()錛?/p>
void open (const char * filename, openmode
mode);榪欓噷filename 鏄竴涓瓧絎︿覆錛屼唬琛ㄨ鎵撳紑鐨勬枃浠跺悕錛宮ode 鏄互涓嬫爣蹇楃鐨勪竴涓粍鍚堬細(xì)
| ios::in | 涓鴻緭鍏?璇?鑰屾墦寮 鏂囦歡 |
| ios::out | 涓鴻緭鍑?鍐?鑰屾墦寮 鏂囦歡 |
| ios::ate | 鍒濆浣嶇疆錛氭枃浠跺熬 |
| ios::app | 鎵鏈夎緭鍑洪檮鍔犲湪鏂囦歡 鏈熬 |
| ios::trunc | 濡傛灉鏂囦歡宸插瓨鍦ㄥ垯鍏? 鍒犻櫎璇ユ枃浠?/td> |
| ios::binary | 浜岃繘鍒舵柟寮?/td> |
榪欎簺鏍囪瘑絎﹀彲浠ヨ緇勫悎浣跨敤錛屼腑闂翠互”鎴?#8221;鎿嶄綔絎?|)闂撮殧銆備緥濡傦紝濡傛灉鎴戜滑鎯寵浠ヤ簩榪涘埗鏂瑰紡鎵撳紑鏂囦歡”example.bin” 鏉ュ啓鍏ヤ竴浜涙暟鎹紝鎴戜滑鍙互閫氳繃浠ヤ笅鏂瑰紡璋冪敤鎴愬憳鍑芥暟open錛堬級鏉ュ疄鐜幫細(xì)
ofstream file;ofstream,
ifstream 鍜?fstream鎵鏈夎繖浜涚被鐨勬垚鍛樺嚱鏁皁pen 閮藉寘鍚簡涓涓粯璁ゆ墦寮鏂囦歡鐨勬柟寮忥紝榪欎笁涓被鐨勯粯璁ゆ柟寮忓悇涓嶇浉鍚岋細(xì)
file.open
("example.bin", ios::out | ios::app | ios::binary);
| 綾?/th> | 鍙傛暟鐨勯粯璁ゆ柟寮?/th> |
|---|---|
| ofstream | ios::out | ios::trunc |
| ifstream | ios::in |
| fstream | ios::in | ios::out |
鍙湁褰撳嚱鏁拌璋冪敤鏃舵病鏈夊0鏄庢柟寮忓弬鏁扮殑鎯呭喌涓嬶紝榛樿鍊兼墠浼?xì)琚噰鐢ㄣ傚鏋滃嚱鏁拌璋冪敤鏃跺0鏄庝簡浠諱綍鍙傛暟錛岄粯璁ゅ煎皢琚畬鍏ㄦ敼鍐欙紝鑰屼笉浼?xì)涓庤皟鐢ㄥ弬鏁熬l勫悎銆?/p>
鐢變簬瀵圭被ofstream, ifstream 鍜?fstream 鐨勫璞℃墍榪涜鐨勭涓涓搷浣滈氬父閮芥槸鎵撳紑鏂囦歡錛岃繖浜涚被閮芥湁涓涓瀯閫犲嚱鏁板彲浠ョ洿鎺ヨ皟鐢╫pen 鍑芥暟錛屽茍鎷ユ湁鍚屾牱鐨勫弬鏁般傝繖鏍鳳紝鎴戜滑灝卞彲浠ラ氳繃浠ヤ笅鏂瑰紡榪涜涓庝笂闈㈠悓鏍風(fēng)殑瀹氫箟瀵硅薄鍜屾墦寮鏂囦歡鐨勬搷浣滐細(xì)
ofstream file ("example.bin", ios::out |
ios::app | ios::binary);涓ょ鎵撳紑鏂囦歡鐨勬柟寮忛兘鏄紜殑銆?/p>
浣犲彲浠ラ氳繃璋冪敤鎴愬憳鍑芥暟is_open()鏉ユ鏌ヤ竴涓枃浠舵槸鍚﹀凡緇忚欏哄埄鐨勬墦寮浜嗭細(xì)
bool is_open();瀹冭繑鍥炰竴涓竷?yōu)?bool)
鍊鹼紝涓虹湡錛坱rue錛変唬琛ㄦ枃浠跺凡緇忚欏哄埄鎵撳紑錛屽亣( false )鍒欑浉鍙嶃?/p>
褰撴枃浠惰鍐欐搷浣滃畬鎴愪箣鍚庯紝鎴戜滑蹇呴』灝嗘枃浠跺叧闂互浣挎枃浠墮噸鏂板彉涓哄彲璁塊棶鐨勩傚叧闂枃浠墮渶瑕佽皟鐢ㄦ垚鍛樺嚱鏁癱lose()錛屽畠璐熻矗灝嗙紦瀛樹腑鐨勬暟鎹帓鏀懼嚭鏉ュ茍 鍏抽棴鏂囦歡銆傚畠鐨勬牸寮忓緢綆鍗曪細(xì)
void close ();榪欎釜鍑芥暟涓鏃﹁璋冪敤錛屽師鍏堢殑嫻?
瀵硅薄(stream object)灝卞彲浠ヨ鐢ㄦ潵鎵撳紑鍏跺畠鐨勬枃浠朵簡錛岃繖涓枃浠朵篃灝卞彲浠ラ噸鏂拌鍏跺畠鐨勮繘紼?process)鎵鏈夎闂簡銆?/p>
涓洪槻姝㈡祦瀵硅薄琚攢姣佹椂榪樿仈緋葷潃鎵撳紑鐨勬枃浠訛紝鏋愭瀯鍑芥暟(destructor)灝嗕細(xì)鑷姩璋冪敤鍏抽棴鍑芥暟close銆?/p>
綾籵fstream, ifstream 鍜宖stream 鏄垎鍒粠ostream, istream 鍜宨ostream 涓紩鐢寵屾潵鐨勩傝繖灝辨槸涓轟粈涔?fstream 鐨勫璞″彲浠ヤ嬌鐢ㄥ叾鐖剁被鐨勬垚鍛樻潵璁塊棶鏁版嵁銆?/p>
涓鑸潵璇達(dá)紝鎴戜滑灝嗕嬌鐢ㄨ繖浜涚被涓庡悓鎺у埗鍙?console)浜や簰鍚屾牱鐨勬垚鍛樺嚱鏁?cin 鍜? cout)鏉ヨ繘琛岃緭鍏ヨ緭鍑恒傚涓嬮潰鐨勪緥棰樻墍紺猴紝鎴戜滑浣跨敤閲嶈澆鐨勬彃鍏ユ搷浣滅<<錛?/p>
| // writing on a text file #include <fiostream.h>int main () { ofstream examplefile (”example.txt”); if (examplefile.is_open()) { examplefile << “This is a line.\n”; examplefile << “This is another line.\n”; examplefile.close(); } return 0; } |
file example.txt This is a line. This is another line. |
浠庢枃浠朵腑璇誨叆鏁版嵁涔熷彲浠ョ敤涓?cin鐨勪嬌鐢ㄥ悓鏍風(fēng)殑鏂規(guī)硶錛?/p>
| // reading a text file #include <iostream.h> #include <fstream.h> #include <stdlib.h>int main () { char buffer[256]; ifstream examplefile (”example.txt”); if (! examplefile.is_open()) { cout << “Error opening file”; exit (1); } while (! examplefile.eof() ) { examplefile.getline (buffer,100); cout << buffer << endl; } return 0; } |
This is a
line. This is another line. |
涓婇潰鐨勪緥瀛愯鍏ヤ竴涓枃鏈枃浠剁殑鍐呭錛岀劧鍚庡皢瀹冩墦鍗板埌灞忓箷涓娿傛敞鎰忔垜浠嬌鐢ㄤ簡涓涓柊鐨勬垚鍛樺嚱鏁板彨鍋歟of 錛屽畠鏄痠fstream 浠庣被 ios 涓戶鎵胯繃鏉ョ殑錛屽綋鍒拌揪鏂囦歡鏈熬鏃惰繑鍥瀟rue 銆?/p>
闄や簡eof()浠ュ錛岃繕鏈変竴浜涢獙璇佹祦鐨勭姸鎬佺殑鎴愬憳鍑芥暟錛堟墍鏈夐兘榪斿洖bool鍨嬭繑鍥炲鹼級錛?/p>
瑕佹兂閲嶇疆浠ヤ笂鎴愬憳鍑芥暟鎵媯(gè)鏌ョ殑鐘舵佹爣蹇楋紝浣犲彲浠ヤ嬌鐢ㄦ垚鍛樺嚱鏁癱lear()錛屾病鏈夊弬鏁般?/p>
鎵鏈夎緭鍏?杈撳嚭嫻佸璞?i/o streams objects)閮芥湁鑷沖皯涓涓祦鎸囬拡錛?/p>
鎴戜滑鍙互閫氳繃浣跨敤浠ヤ笅鎴愬憳鍑芥暟鏉ヨ鍑烘垨閰嶇疆榪欎簺鎸囧悜嫻佷腑璇誨啓浣嶇疆鐨勬祦鎸囬拡錛?/p>
seekg ( pos_type position );
seekp ( pos_type
position );
浣跨敤榪欎釜鍘熷瀷錛屾祦鎸囬拡琚敼鍙樹負(fù)鎸囧悜浠庢枃浠跺紑濮嬭綆楃殑涓涓粷瀵逛綅緗傝姹備紶鍏ョ殑鍙傛暟綾誨瀷涓庡嚱鏁?tellg 鍜宼ellp 鐨勮繑鍥炲肩被鍨嬬浉鍚屻?/p>
seekg ( off_type offset, seekdir direction );
seekp
( off_type offset, seekdir direction );
浣跨敤榪欎釜鍘熷瀷鍙互鎸囧畾鐢卞弬鏁癲irection鍐沖畾鐨勪竴涓叿浣撶殑鎸囬拡寮濮嬭綆楃殑涓涓綅縐?offset)銆傚畠鍙互鏄細(xì)
| ios::beg | 浠庢祦寮濮嬩綅 緗綆楃殑浣嶇Щ |
| ios::cur | 浠庢祦鎸囬拡褰? 鍓嶄綅緗紑濮嬭綆楃殑浣嶇Щ |
| ios::end | 浠庢祦鏈熬澶? 寮濮嬭綆楃殑浣嶇Щ |
嫻?鎸囬拡 get 鍜?put 鐨勫煎鏂囨湰鏂囦歡(text file)鍜屼簩榪涘埗鏂囦歡(binary file)鐨勮綆楁柟娉曢兘鏄笉鍚岀殑錛屽洜涓烘枃鏈ā寮忕殑鏂囦歡涓煇浜涚壒孌婂瓧絎﹀彲鑳借淇敼銆傜敱浜庤繖涓師鍥狅紝寤鴻瀵逛互鏂囨湰鏂囦歡妯″紡鎵撳紑鐨勬枃浠舵繪槸浣跨敤seekg 鍜? seekp鐨勭涓縐嶅師鍨嬶紝鑰屼笖涓嶈瀵箃ellg 鎴?tellp 鐨勮繑鍥炲艱繘琛屼慨鏀廣傚浜岃繘鍒舵枃浠訛紝浣犲彲浠ヤ換鎰忎嬌鐢ㄨ繖浜涘嚱鏁幫紝搴旇涓嶄細(xì)鏈変換浣曟剰澶栫殑琛屼負(fù)浜х敓銆?/p>
浠ヤ笅渚嬪瓙浣跨敤榪欎簺鍑芥暟鏉ヨ幏寰椾竴涓簩榪涘埗鏂囦歡鐨勫ぇ灝忥細(xì)
| // obtaining file size #include <iostream.h> #include <fstream.h>const char * filename = “example.txt”;int main () { long l,m; ifstream file (filename, ios::in|ios::binary); l = file.tellg(); file.seekg (0, ios::end); m = file.tellg(); file.close(); cout << “size of ” << filename; cout << ” is ” << (m-l) << ” bytes.\n”; return 0; } |
size of
example.txt is 40 bytes. |
鍦ㄤ簩榪涘埗鏂囦歡涓紝浣跨敤<< 鍜?gt;>錛屼互鍙?qiáng)鍑芥晭图堝getline錛夋潵鎿嶄綔絎﹁緭鍏ュ拰杈撳嚭鏁版嵁錛屾病鏈変粈涔堝疄闄呮剰涔夛紝铏界劧瀹冧滑鏄鍚堣娉曠殑銆?/p>
鏂?浠舵祦鍖呮嫭涓や釜涓洪『搴忚鍐欐暟鎹壒孌婅璁$殑鎴愬憳鍑芥暟錛歸rite 鍜?read銆傜涓涓嚱鏁?(write) 鏄痮stream 鐨勪竴涓垚鍛樺嚱鏁幫紝閮芥槸琚玱fstream鎵緇ф壙銆傝宺ead 鏄痠stream 鐨勪竴涓垚鍛樺嚱鏁幫紝琚玦fstream 鎵緇ф壙銆傜被 fstream 鐨勫璞″悓鏃舵嫢鏈夎繖涓や釜鍑芥暟銆傚畠浠殑鍘熷瀷鏄細(xì)
write ( char * buffer, streamsize size );
read (
char * buffer, streamsize size );
榪欓噷 buffer 鏄竴鍧楀唴瀛樼殑鍦板潃錛岀敤鏉ュ瓨鍌ㄦ垨璇誨嚭鏁版嵁銆傚弬鏁皊ize 鏄竴涓暣鏁板鹼紝琛ㄧず瑕佷粠緙撳瓨錛坆uffer錛変腑璇誨嚭鎴栧啓鍏ョ殑瀛楃鏁般?/p>
| // reading binary file #include <iostream> #include <fstream.h>const char * filename = “example.txt”;int main () { char * buffer; long size; ifstream file (filename, ios::in|ios::binary|ios::ate); size = file.tellg(); file.seekg (0, ios::beg); buffer = new char [size]; file.read (buffer, size); file.close();cout << “the complete file is in a buffer”;delete[] buffer; return 0; } |
The
complete file is in a buffer |
褰?鎴戜滑瀵規(guī)枃浠舵祦榪涜鎿嶄綔鐨勬椂鍊欙紝瀹冧滑涓庝竴涓猻treambuf 綾誨瀷鐨勭紦瀛?buffer)鑱旂郴鍦ㄤ竴璧楓傝繖涓紦瀛橈紙buffer錛夊疄闄呮槸涓鍧楀唴瀛樼┖闂達(dá)紝浣滀負(fù)嫻?stream)鍜岀墿鐞嗘枃浠剁殑濯掍粙銆備緥濡傦紝瀵逛簬涓涓緭鍑烘祦錛? 姣忔鎴愬憳鍑芥暟put (鍐欎竴涓崟涓瓧絎?琚皟鐢紝榪欎釜瀛楃涓嶆槸鐩存帴琚啓鍏ヨ杈撳嚭嫻佹墍瀵瑰簲鐨勭墿鐞嗘枃浠朵腑鐨勶紝鑰屾槸棣栧厛琚彃鍏ュ埌璇ユ祦鐨勭紦瀛橈紙buffer錛変腑銆?/p>
褰撶紦瀛樿鎺掓斁鍑烘潵(flush)鏃訛紝瀹冮噷闈㈢殑鎵鏈夋暟鎹垨鑰呰鍐欏叆鐗╃悊濯掕川涓紙濡傛灉鏄竴涓緭鍑烘祦鐨勮瘽錛夛紝鎴栬呯畝鍗曠殑琚姽鎺?濡傛灉鏄竴涓緭鍏ユ祦鐨勮瘽)銆? 榪欎釜榪囩▼縐頒負(fù)鍚屾(synchronization)錛屽畠浼?xì)鍦ㄤ互涓嬩恢M竴鎯呭喌涓嬪彂鐢燂細(xì)


榪欏氨鏄垜鐨勬暟鎹簡銆傜幇鍦紝鎴戣緇欒繖浜涙暟鎺掑簭銆傚亣濡傛垜鐨勭數(shù)鑴戝彧鑳藉紑鍑?..99鐨勬暟緇勶紝閭h鏁版帓搴忕畻娉曟渶澶氬涓や綅鏁拌繘琛屾帓搴忋傛垜灝辨妸
姣忎釜鍏綅鏁頒袱浣嶄袱浣嶅湴鍒嗘垚鍥涙錛堝浘1錛夛紝鍒嗗埆榪涜鍥涙璁℃暟鎺掑簭銆傚湴鐞冧漢閮界煡閬撴湀浠界浉鍚屾椂搴旇鐪嬪摢涓鏃ワ紝鍥犳鎴戜滑鐪嬫湀浠界殑澶у皬鏃跺簲璇ヤ簨鍏堜繚璇佹棩宸茬粡鏈夊簭銆傛崲
鍙ヨ瘽璇達(dá)紝鎴戜滑鍏堝“鏈涓嶉噸瑕?#8221;鐨勯儴鍒嗚繘琛屾帓搴忋傛垜浠厛瀵規(guī)墍鏈夋暟鐨勬渶鍚庝袱浣嶈繘琛屼竴嬈¤鏁版帓搴忥紙鍥?錛夈傛敞鎰忚瀵?鏈?6鍙風(fēng)殑MM鍜?鏈?6鍙風(fēng)殑MM錛屾湰嬈℃帓
搴忎腑瀹冧滑鐨勫睘鎬у肩浉鍚岋紝鐢變簬璁℃暟鎺掑簭鏄ǔ瀹氱殑錛屽洜姝?鏈堜喚閭d釜鎺掑畬鍚庝緷鐒跺湪1鏈堜喚閭d釜鐨勫墠澶淬傛帴涓嬫潵鎴戜滑瀵圭櫨浣嶅拰鍗冧綅榪涜鎺掑簭錛堝浘3錛夈備綘鍙互鐪嬪埌涓や釜
26鏃ョ殑MM鍦ㄨ繖涓嬈℃帓搴忎腑鍒嗗嚭浜嗗ぇ灝忥紝鑰屾湀浠界浉鍚岀殑MM渚濈劧淇濇寔鏃ユ暟鏈夊簭錛堝洜涓鴻鏁版帓搴忔槸紼沖畾鐨勶級銆傛渶鍚庢垜浠騫翠喚鎺掑簭錛堝浘4錛夛紝瀹屾垚鏁翠釜綆楁硶銆傚ぇ瀹墮兘
鏄法涓栫邯鐨勫ソ鍎跨錛屽洜姝ゆ病鏈夊浘5浜嗐?br>

榪?
縐嶇畻娉曟樉鐒舵槸姝g‘鐨勩傚畠鐨勫鏉傚害涓鑸啓鎴怬(d*(n+m))錛屽叾涓璶琛ㄧずn涓暟錛宮鏄垜寮鐨勬暟緇勫ぇ灝忥紙鏈緥涓璵=100錛夛紝d鏄竴涓父鏁板洜瀛愶紙鏈緥涓?
d=4錛夈傛垜浠涓哄畠涔熸槸綰挎х殑銆?br>
闂浜旓細(xì)榪欐牱鐨勬帓搴忔柟娉曡繕鏈変粈涔堣嚧鍛界殑緙洪櫡錛?/strong>
STOP! You should think for a while.
鍗?
浣挎暟鎹湁30浣嶏紝鎴戜滑涔熷彲浠ョ敤d=5鎴?鐨凴adix綆楁硶榪涜鎺掑簭銆備絾錛岃鏄粰瀹氱殑鏁版嵁鏈夋棤絀峰浣嶆庝箞鍔烇紵鏈変漢璇達(dá)紝榪欏彲鑳戒箞銆傝繖鏄彲鑳界殑錛屾瘮濡傜粰瀹氱殑鏁版嵁
鏄皬鏁幫紙鏇村噯紜湴璇達(dá)紝瀹炴暟錛夈傚熀浜庢瘮杈冪殑鎺掑簭鍙互鍖哄垎355/113鍜?#960;鍝?
涓ぇ錛屼絾浣犱笉鐭ラ亾Radix鎺掑簭闇瑕佺簿紜埌鍝竴浣嶃傝繖涓嬫儴浜嗭紝瀹炴暟鐨勫嚭鐜版妸璨屼技楂樼鎶鐨勭嚎鎬ф椂闂存帓搴忔墦鍥炰簡鍐滀笟鏃朵唬銆傝繖鏃訛紝妗舵帓搴忓啀搴﹀嚭灞憋紝鎸芥晳浜嗙嚎鎬ф椂
闂存帓搴忔?zhèn)叉儴鐨勫懡杩愩?br>
闂鍏細(xì)濡備綍瀵瑰疄鏁拌繘琛岀嚎鎬ф椂闂存帓搴忥紵
STOP! You should think for a while.
鎴?
浠妸闂綆鍖栦竴涓嬶紝緇欏嚭鐨勬墍鏈夋暟閮芥槸0鍒?涔嬮棿鐨勫皬鏁般傚鏋滀笉鏄紝涔熷彲浠ユ妸鎵鏈夋暟鍚屾椂闄や互涓涓ぇ鏁存暟浠庤岃漿鍖栦負(fù)榪欑褰㈠紡銆傛垜浠緷鐒惰绔嬭嫢騫蹭釜妗訛紝姣斿錛屼互
灝忔暟鐐瑰悗闈竴浣嶆暟涓轟緷鎹鎵鏈夋暟榪涜鍒掑垎銆傛垜浠粛鐒剁敤閾捐〃鎶婂悓涓綾葷殑鏁頒覆鍦ㄤ竴璧鳳紝涓嶅悓鐨勬槸錛屾瘡涓涓摼琛ㄩ兘鏄湁搴忕殑銆備篃灝辨槸璇達(dá)紝姣忎竴嬈¤鍒頒竴涓柊鐨勬暟閮借榪?
琛屼竴嬈℃彃鍏ユ帓搴忋傜湅鎴戜滑鐨勪緥瀛愶細(xì)
A[]=
0.12345, 0.111, 0.618, 0.9, 0.99999
+---+---+---+---+---+---+---+---+---+---+
鍗佸垎浣嶏細(xì) | 0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 |
+---+-o-+---+---+---+---+-o-+---+---+-o-+
| | |
A[2]=0.111 A[3]=0.618 A[4]=0.9
| |
A[1]=0.12345 A[5]=0.99999
鍋囧鍐嶄笅涓涓鍏ョ殑鏁版槸
0.122222錛岃繖涓暟闇瑕佹彃鍏ュ埌鍗佸垎浣嶄負(fù)1鐨勯偅涓摼琛ㄩ噷閫傚綋鐨勪綅緗傛垜浠渶瑕侀亶鍘嗚閾捐〃鐩村埌鎵懼埌絎竴涓瘮0.122222澶х殑鏁幫紝鍦ㄤ緥瀛愪腑鍒欏簲璇ユ彃鍏?
鍒伴摼琛ㄤ腑A[2]鍜孉[1]涔嬮棿銆傛渶鍚庯紝鎴戜滑鎸夐『搴忛亶鍘嗘墍鏈夐摼琛紝渚濇杈撳嚭姣忎釜閾捐〃涓殑姣忎釜鏁般?br> 榪欎釜綆楁硶鏄劇劧鏄紜殑錛屼絾澶嶆潅搴︽樉鐒朵笉鏄?
綰挎с備簨瀹炰笂錛岃繖縐嶇畻娉曟渶鍧忔儏鍐典笅鏄疧(n^2)鐨勶紝鍥犱負(fù)褰撴墍鏈夋暟鐨勫崄鍒嗕綅閮界浉鍚屾椂綆楁硶灝辨槸涓涓彃鍏ユ帓搴忋傚拰鍘熸潵涓鏍鳳紝鎴戜滑涓嬮潰瑕佽綆楃畻娉曠殑騫沖潎鏃墮棿澶嶆潅
搴︼紝鎴戜滑甯屾湜榪欑綆楁硶鐨勫鉤鍧囧鏉傚害鏄嚎鎬х殑銆?br> 榪欐綆楀鉤鍧囧鏉傚害鎴戜滑鐢ㄦ渶絎ㄧ殑鍔炴硶銆傛垜浠皢綆楀嚭鎵鏈夊彲鑳藉嚭鐜扮殑鎯呭喌鐨勬繪椂闂村鏉傚害錛岄櫎浠ユ葷殑
鎯呭喌鏁幫紝寰楀埌騫沖潎鐨勫鏉傚害鏄灝戙?br> 姣忎釜鏁伴兘鍙兘灞炰簬10涓《涓殑涓涓紝n涓暟鎬葷殑鎯呭喌鏈?0^n縐嶃傝繖涓兼槸鎴戜滑搴炲ぇ鐨勭畻寮忕殑鍒嗘瘝閮ㄥ垎銆?
濡傛灉涓涓《閲屾湁K涓厓绱狅紝閭d箞鍙笌榪欎釜妗舵湁鍏崇殑鎿嶄綔鏈塐(K^2)嬈★紝瀹冨氨鏄竴嬈℃彃鍏ユ帓搴忕殑鎿嶄綔嬈℃暟銆備笅闈㈣綆楋紝鍦?0^n縐嶆儏鍐典腑錛孠0=1鏈夊灝戠鎯?
鍐點(diǎn)侹0=1琛ㄧず錛宯涓暟涓彧鏈変竴涓暟鍦?鍙鋒《錛屽叾浣檔-1涓暟鐨勫崄鍒嗕綅灝卞彧鑳藉湪1鍒?涓夋嫨銆傞偅涔圞0=1鐨勬儏鍐墊湁C(n,1)*9^(n-1)錛岃屾瘡
涓狵0=1鐨勬儏鍐靛湪0鍙鋒《涓皢浜х敓1^2鐨勫鏉傚害銆傜被浼煎湴錛孠i=p鐨勬儏鍐墊暟涓篊(n,p)*9^(n-p)錛屽鏉傚害鎬昏涓篊(n,p)*9^(n-
p)*p^2銆傛灇涓炬墍鏈塊鐨勪笅鏍囧拰p鍊鹼紝绱姞璧鋒潵錛岃繖涓畻寮忓ぇ瀹跺簲璇ヨ兘鍐欏嚭鏉ヤ簡錛屼絾鏄繖涓?#8230;…鎬庝箞綆楀晩銆傚埆鎬曪紝鎴戜滑鏄悶璁$畻鏈虹殑錛屾嬁鍑虹偣鍜孧O涓嶄竴鏍風(fēng)殑涓?
瑗挎潵銆備簬鏄紝Mathematica 5.0闅嗛噸鐧誨満錛屾垜鍋氭暟瀛︿綔涓氬叏闈犲畠銆傚畠?yōu)畣甯垜浠寲绠榪欎釜澶嶆潅鐨勫紡瀛愩?br>
鎴?
浠仐鎲懼湴鍙戠幇錛岃櫧鐒跺父鏁板洜瀛愬緢灝忥紙鍙湁0.1錛夛紝浣嗙畻娉曠殑騫沖潎澶嶆潅搴︿粛鐒舵槸騫蟲柟鐨勩傜瓑涓涓嬶紝1/10鐨勯偅涓?0鏄垜浠《鐨勪釜鏁板悧錛熼偅涔堟垜浠負(fù)浠涔堜笉鎶婃《鐨?
涓暟寮勫ぇ鐐癸紵鎴戜滑騫茶剢鐢╩鏉ヨ〃紺烘《鐨勪釜鏁幫紝閲嶆柊璁$畻涓嬈★細(xì)
鍖?
綆鍑烘潵錛屾搷浣滄鏁頒負(fù)O(n+n^2/m)銆傚彂鐜頒簡涔堬紝濡傛灉m=Θ(n)鐨勮瘽錛屽鉤鍧囧鏉傚害灝卞彉鎴愪簡O(n)銆備篃灝辨槸璇達(dá)紝褰撴《鐨勪釜鏁扮瓑浜庤緭鍏ユ暟鎹殑涓暟鏃訛紝綆?
娉曟槸騫沖潎綰挎х殑銆?br> 鎴戜滑灝嗗湪Hash琛ㄥ紑鏁e垪鐨勪粙緇嶄腑閲嶆柊鎻愬埌榪欎釜緇撹銆?br>
涓旀參錛岃繕鏈変竴涓棶棰樸?0涓《浠ュ崄鍒嗕綅鐨?
鏁板瓧褰掔被錛岄偅涔坣涓《鐢ㄤ粈涔堟柟娉曟潵鍒嗙被鍛紵娉ㄦ剰錛屽垎綾葷殑鏂規(guī)硶闇瑕佹弧瓚籌紝涓錛屼竴涓暟鍒嗗埌姣忎釜妗墮噷鐨勬鐜囩浉鍚岋紙榪欐牱鎵嶆湁鎴戜滑涓婇潰鐨勭粨璁猴級錛涗簩錛屾墍鏈夋《閲屽綰沖厓
绱犵殑鑼冨洿蹇呴』鏄繛緇殑銆傛牴鎹繖涓や釜鏉′歡錛屾垜浠湁鍔炴硶鎶婃墍鏈夋暟鎭板ソ鍒嗕負(fù)n綾匯傛垜浠殑杈撳叆鏁版嵁涓嶆槸閮藉湪0鍒?涔嬮棿涔堬紵鍙渶瑕佺湅榪欎簺鏁頒箻浠鐨勬暣鏁伴儴鍒嗘槸澶氬皯灝?
琛屼簡錛岃鍒頒竴涓暟鍚庝箻浠鍙栨暣寰楀嚑灝辨彃鍏ュ埌鍑犲彿妗墮噷銆傝繖鏈川涓婄浉褰撲簬鎶婂尯闂碵0,1)騫沖潎鍒嗘垚n浠姐?br>
闂涓冿細(xì)鏈?
娌℃湁澶嶆潅搴︿綆浜庣嚎鎬х殑鎺掑簭綆楁硶
STOP! You should
think for a while.
鎴戜滑浠嶰(n^2)璧板悜O(nlogn)錛屽張浠嶰(nlogn)璧板悜綰挎э紝
姣忎竴嬈℃垜浠兘璁ㄨ浜嗗鏉傚害涓嬮檺鐨勯棶棰橈紝鏍規(guī)嵁璁ㄨ鐨勭粨鏋滄彁鍑轟簡鏇翠紭鐨勭畻娉曘傝繖嬈℃葷畻涓嶈浜嗭紝涓嶅彲鑳芥湁姣旂嚎鎬ц繕蹇殑綆楁硶浜嗭紝鍥犱負(fù)鈥斺斾綘璇誨叆銆佽緭鍑烘暟鎹嚦灝戝氨闇
瑕佺嚎鎬х殑鏃墮棿銆傛帓搴忕畻娉曚箣鏃呭湪綰挎ф椂闂村鏉傚害榪欎竴绔欑粓姝簡錛屾墍鏈夊崄縐嶆帓搴忕畻娉曞埌榪欓噷浠嬬粛瀹屾瘯浜嗐?br>
鏂囩珷鏈夎秺鍐欒秺闀?
鐨勮秼鍔夸簡錛屾垜媯(gè)鏌ヨ搗鏉ヤ篃瓚婃潵瓚婄瘡浜嗐傛垜鍙堢湅浜嗕笁閬嶏紝搴旇娌¢棶棰樹簡銆傜兢浼楃殑鐪肩潧鏄洩浜殑錛屾伋璇峰ぇ瀹跺府鎴戞壘閿欍?br>
x
<- x # y
y <- x @ y
x <- x @ yprocedure
swap(var a,b:longint);
begin
a:=a + b;
b:=a - b;
a:=a - b;
end;procedure swap(var a,b:longint);
begin
a:=a
xor b;
b:=a xor b;
a:=a xor b;
end;var
a:word;
begin
a:=100;
a:=not a;
writeln(a);
end.#include
<stdio.h>
int main()
{
unsigned short a=100;
a
= ~a;
printf( "%d\n", a );
return 0;
}var
a,b:integer;
begin
a:=$0000;
b:=$0001;
write(a,' ',b,' ');
a:=$FFFE;
b:=$FFFF;
write(a,' ',b,' ');
a:=$7FFF;
b:=$8000;
writeln(a,'
',b);
end.#include <stdio.h>
int main()
{
short
int a, b;
a = 0×0000;
b = 0×0001;
printf( "%d %d
", a, b );
a = 0xFFFE;
b = 0xFFFF;
printf( "%d %d
", a, b );
a = 0×7FFF;
b = 0×8000;
printf( "%d
%d\n", a, b );
return 0;
}===== 鐪熸寮虹殑涓滆タ鏉ヤ簡錛?nbsp; =====
浜岃繘鍒朵腑鐨?鏈夊鏁頒釜榪樻槸鍋舵暟涓?br> 鎴戜滑鍙互鐢ㄤ笅闈㈢殑浠g爜鏉ヨ綆?
涓涓?2浣嶆暣鏁扮殑浜岃繘鍒朵腑1鐨勪釜鏁扮殑濂囧伓鎬э紝褰撹緭鍏ユ暟鎹殑浜岃繘鍒惰〃紺洪噷鏈夊伓鏁頒釜鏁板瓧1鏃剁▼搴忚緭鍑?錛屾湁濂囨暟涓垯杈撳嚭1銆備緥濡傦紝1314520鐨勪簩榪涘埗
101000000111011011000涓湁9涓?錛屽垯x=1314520鏃剁▼搴忚緭鍑?銆?br>var
i,x,c:longint;
begin
readln(x);
c:=0;
for i:=1 to
32 do
begin
c:=c + x and 1;
x:=x shr 1;
end;
writeln( c and 1 );
end.
浣嗚繖鏍風(fēng)殑鏁堢巼騫朵笉楂橈紝浣嶈繍綆楃殑紲炲涔嬪榪?
娌℃湁浣撶幇鍑烘潵銆?br> 鍚屾牱鏄垽鏂簩榪涘埗涓?鐨勪釜鏁扮殑濂囧伓鎬э紝涓嬮潰榪欐浠g爜灝卞己浜嗐備綘鑳界湅鍑鴻繖涓唬鐮佺殑鍘熺悊鍚楋紵var
x:longint;
begin
readln(x);
x:=x xor (x shr 1);
x:=x xor (x shr 2);
x:=x xor (x shr 4);
x:=x xor (x shr 8);
x:=x xor (x shr 16);
writeln(x and 1);
end.
涓轟簡璇存槑
涓婇潰榪欐浠g爜鐨勫師鐞嗭紝鎴戜滑榪樻槸鎷?314520鍑烘潵璇翠簨銆?314520鐨勪簩榪涘埗涓?01000000111011011000錛岀涓嬈″紓鎴栨搷浣滅殑緇撴灉濡?
涓嬶細(xì)
00000000000101000000111011011000
XOR 0000000000010100000011101101100
---------------------------------------
00000000000111100000100110110100
寰?
鍒扮殑緇撴灉鏄竴涓柊鐨勪簩榪涘埗鏁幫紝鍏朵腑鍙寵搗絎琲浣嶄笂鐨勬暟琛ㄧず鍘熸暟涓i鍜宨+1浣嶄笂鏈夊鏁頒釜1榪樻槸鍋舵暟涓?銆傛瘮濡傦紝鏈鍙寵竟閭d釜0琛ㄧず鍘熸暟鏈袱浣嶆湁鍋舵暟涓?錛屽彸
璧風(fēng)3浣嶄笂鐨?灝辮〃紺哄師鏁扮殑榪欎釜浣嶇疆鍜屽墠涓涓綅緗腑鏈夊鏁頒釜1銆傚榪欎釜鏁拌繘琛岀浜屾寮傛垨鐨勭粨鏋滃涓嬶細(xì)
00000000000111100000100110110100
XOR
000000000001111000001001101101
---------------------------------------
00000000000110011000101111011001
緇?
鏋滈噷鐨勬瘡涓?琛ㄧず鍘熸暟鐨勮浣嶇疆鍙?qiáng)鍏跺墠闈笁涓綅缃腑鍏辨湁濂囨曨C釜1錛屾瘡涓?灝辮〃紺哄師鏁板搴旂殑鍥涗釜浣嶇疆涓婂叡鍋舵暟涓?銆備竴鐩村仛鍒扮浜旀寮傛垨緇撴潫鍚庯紝寰楀埌鐨勪簩榪涘埗鏁?
鐨勬渶鏈綅灝辮〃紺烘暣涓?2浣嶆暟閲屾湁澶氬皯涓?錛岃繖灝辨槸鎴戜滑鏈緇堟兂瑕佺殑絳旀銆?br>
璁$畻浜岃繘鍒朵腑鐨?鐨勪釜鏁?br> 鍚屾牱鍋囪x鏄竴涓?
32浣嶆暣鏁般傜粡榪囦笅闈簲嬈¤祴鍊煎悗錛寈鐨勫煎氨鏄師鏁扮殑浜岃繘鍒惰〃紺轟腑鏁板瓧1鐨勪釜鏁般傛瘮濡傦紝鍒濆鏃秞涓?314520錛堢綉鍙嬫姄鐙傦細(xì)鑳戒笉鑳芥崲涓涓暟鍟婏級錛岄偅涔堟渶鍚?
x灝卞彉鎴愪簡9錛屽畠琛ㄧず1314520鐨勪簩榪涘埗涓湁9涓?銆?br>x := (x and $55555555) + ((x shr 1)
and $55555555);
x := (x and $33333333) + ((x shr 2) and $33333333);
x := (x and $0F0F0F0F) + ((x shr 4) and $0F0F0F0F);
x := (x and
$00FF00FF) + ((x shr 8) and $00FF00FF);
x := (x and $0000FFFF) +
((x shr 16) and $0000FFFF);
涓轟簡渚夸簬瑙h錛屾垜浠笅闈粎璇存槑榪欎釜紼嬪簭鏄浣曞涓涓?浣嶆暣鏁拌繘
琛屽鐞嗙殑銆傛垜浠嬁鏁板瓧211錛堟垜浠彮鏌怣M鐨勭敓鏃ワ級鏉ュ紑鍒銆?11鐨勪簩榪涘埗涓?1010011銆?br>
+---+---+---+---+---+---+---+---+
|
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | <---鍘熸暟
+---+---+---+---+---+---+---+---+
| 1
0 | 0 1 | 0 0 | 1 0 | <---絎竴嬈¤繍綆楀悗
+-------+-------+-------+-------+
| 0
0 1 1 | 0 0 1 0 | <---絎簩嬈¤繍綆楀悗
+---------------+---------------+
| 0
0 0 0 0 1 0 1 | <---絎笁嬈¤繍綆楀悗錛屽緱鏁頒負(fù)5
+-------------------------------+
鏁?
涓▼搴忔槸涓涓垎娌葷殑鎬濇兂銆傜涓嬈℃垜浠妸姣忕浉閭?cè)潥勪袱浣嶅姞钃v鏉ワ紝寰楀埌姣忎袱浣嶉噷1鐨勪釜鏁幫紝姣斿鍓嶄袱浣?0灝辮〃紺哄師鏁扮殑鍓嶄袱浣嶆湁2涓?銆傜浜屾鎴戜滑緇х畫涓や袱鐩?
鍔狅紝10+01=11錛?0+10=10錛屽緱鍒扮殑緇撴灉鏄?0110010錛屽畠琛ㄧず鍘熸暟鍓?浣嶆湁3涓?錛屾湯4浣嶆湁2涓?銆傛渶鍚庝竴嬈℃垜浠妸0011鍜?010
鍔犺搗鏉ワ紝寰楀埌鐨勫氨鏄暣涓簩榪涘埗涓?鐨勪釜鏁般傜▼搴忎腑宸у鍦頒嬌鐢ㄥ彇浣嶅拰鍙崇Щ錛屾瘮濡傜浜岃涓?33333333鐨勪簩榪涘埗涓?0110011001100….錛岀敤
瀹冨拰x鍋歛nd榪愮畻灝辯浉褰撲簬浠?涓哄崟浣嶉棿闅斿彇鏁般俿hr鐨勪綔鐢ㄥ氨鏄鍔犳硶榪愮畻鐨勭浉鍚屾暟浣嶅榻愩?br>
浜屽垎鏌ユ壘32浣嶆暣鏁扮殑鍓嶅0涓暟
榪?
閲岀敤鐨凜璇█錛屾垜鐩存帴Copy鐨凥acker's
Delight涓婄殑浠g爜銆傝繖孌典唬鐮佸啓鎴怌瑕佸ソ鐪嬩簺錛屽啓鎴怭ascal鐨勮瘽浼?xì)鍑虹幇寰堝begin鍜宔nd錛屾悶寰椾唬鐮佸緢闅劇湅銆傜▼搴忔濇兂鏄簩鍒嗘煡鎵撅紝搴旇寰堢畝
鍗曪紝鎴戝氨涓嶇粏璇翠簡銆?br>int nlz(unsigned x)
{
int n;
if (x
== 0) return(32);
n = 1;
if ((x >> 16) == 0) {n = n
+16; x = x <<16;}
if ((x >> 24) == 0) {n = n + 8; x = x
<< 8;}
if ((x >> 28) == 0) {n = n + 4; x = x <<
4;}
if ((x >> 30) == 0) {n = n + 2; x = x << 2;}
n = n - (x >> 31);
return n;
}
鍙敤浣嶈繍綆楁潵鍙?
緇濆鍊?br> 榪欐槸涓涓潪甯告湁瓚g殑闂銆傚ぇ瀹跺厛鑷繁鎯蟲兂鍚э紝Ctrl+A鏄劇ず絳旀銆?br> 絳旀錛氬亣璁緓涓?2浣嶆暣鏁幫紝鍒檟 xor
(not (x shr 31) + 1) + x shr 31鐨勭粨鏋滄槸x鐨勭粷瀵瑰?br> x shr
31鏄簩榪涘埗鐨勬渶楂樹綅錛屽畠鐢ㄦ潵琛ㄧずx鐨勭鍙楓傚鏋滃畠涓?錛坸涓烘錛夛紝鍒檔ot (x shr 31) +
1絳変簬$00000000錛屽紓鎴栦換浣曟暟緇撴灉閮戒笉鍙橈紱濡傛灉鏈楂樹綅涓?錛坸涓鴻礋錛夛紝鍒檔ot (x shr 31) +
1絳変簬$FFFFFFFF錛寈寮傛垨瀹冪浉褰撲簬鎵鏈夋暟浣嶅彇鍙嶏紝寮傛垨瀹屽悗鍐嶅姞涓銆?br>
楂樹綆浣嶄氦鎹?br> 榪欎釜棰?/a>瀹為檯涓婃槸鎴戝嚭鐨勶紝鍋氫負(fù)瀛︽牎鍐呴儴NOIp妯℃嫙璧涚殑絎竴棰樸傞鐩槸榪欐牱錛?br>
緇欏嚭涓涓皬浜?^32鐨勬鏁存暟銆傝繖涓暟鍙互鐢ㄤ竴涓?2浣嶇殑浜岃繘鍒舵暟琛ㄧず錛堜笉瓚?2浣嶇敤0琛ヨ凍錛夈傛垜浠О榪欎釜浜岃繘 鍒舵暟鐨勫墠16浣嶄負(fù)“楂樹綅”錛屽悗16浣嶄負(fù)“浣庝綅”銆傚皢瀹冪殑楂樹綆浣嶄氦鎹紝鎴戜滑鍙互寰楀埌涓涓柊鐨勬暟銆傝瘯闂繖涓柊鐨勬暟鏄灝戯紙鐢ㄥ崄榪涘埗琛ㄧず錛夈?br>銆銆渚嬪錛? 鏁?314520鐢ㄤ簩榪涘埗琛ㄧず涓?000 0000 0001 0100 0000 1110 1101 1000錛堟坊鍔犱簡11涓墠瀵?琛ヨ凍涓?2浣嶏級錛屽叾涓墠16浣嶄負(fù)楂樹綅錛屽嵆0000 0000 0001 0100錛涘悗16浣嶄負(fù)浣庝綅錛屽嵆0000 1110 1101 1000銆傚皢瀹冪殑楂樹綆浣嶈繘琛屼氦鎹紝鎴戜滑寰楀埌浜嗕竴涓柊鐨勪簩榪涘埗鏁?000 1110 1101 1000 0000 0000 0001 0100銆傚畠鍗蟲槸鍗佽繘鍒剁殑249036820銆?
褰撴椂鍑犱箮娌℃湁浜烘兂鍒扮敤涓鍙ヤ綅鎿嶄綔鏉ヤ唬鏇垮啑闀跨殑紼嬪簭銆備嬌鐢ㄤ綅榪愮畻鐨勮瘽涓ゅ彞璇濆氨瀹屼簡銆?br>var
n:dword;
begin
readln( n );
writeln( (n shr 16) or
(n shl 16) );
end.
鑰屼簨瀹炰笂錛孭ascal鏈変竴涓郴緇熷嚱鏁皊wap鐩存帴灝卞彲浠ョ敤銆?br>
浜?
榪涘埗閫嗗簭
涓嬮潰鐨勭▼搴忚鍏ヤ竴涓?2浣嶆暣鏁板茍杈撳嚭瀹冪殑浜岃繘鍒跺掑簭鍚庢墍琛ㄧず鐨勬暟銆?br> 杈撳叆錛?
1314520 錛堜簩榪涘埗涓?0000000000101000000111011011000錛?br> 杈撳嚭錛?
460335104 錛堜簩榪涘埗涓?0011011011100000010100000000000錛?br>var
x:dword;
begin
readln(x);
x := (x and $55555555) shl 1
or (x and $AAAAAAAA) shr 1;
x := (x and $33333333) shl 2 or (x
and $CCCCCCCC) shr 2;
x := (x and $0F0F0F0F) shl 4 or (x and
$F0F0F0F0) shr 4;
x := (x and $00FF00FF) shl 8 or (x and
$FF00FF00) shr 8;
x := (x and $0000FFFF) shl 16 or (x and
$FFFF0000) shr 16;
writeln(x);
end.
瀹冪殑鍘熺悊鍜屽垰鎵嶆眰浜岃繘鍒朵腑1
鐨勪釜鏁伴偅涓緥棰樻槸澶ц嚧鐩稿悓鐨勩傜▼搴忛鍏堜氦鎹㈡瘡鐩擱偦涓や綅涓婄殑鏁幫紝浠ュ悗鎶婁簰鐩鎬氦鎹㈣繃鐨勬暟鐪嬫垚涓涓暣浣擄紝緇х畫榪涜浠?浣嶄負(fù)鍗曚綅銆佷互4浣嶄負(fù)鍗曚綅鐨勫乏鍙沖鎹㈡搷浣溿傛垜
浠啀嬈$敤8浣嶆暣鏁?11鏉ユ紨紺虹▼搴忔墽琛岃繃紼嬶細(xì)
+---+---+---+---+---+---+---+---+
| 1 | 1 | 0
| 1 | 0 | 0 | 1 | 1 | <---鍘熸暟
+---+---+---+---+---+---+---+---+
| 1
1 | 1 0 | 0 0 | 1 1 | <---絎竴嬈¤繍綆楀悗
+-------+-------+-------+-------+
| 1
0 1 1 | 1 1 0 0 | <---絎簩嬈¤繍綆楀悗
+---------------+---------------+
| 1
1 0 0 1 0 1 1 | <---絎笁嬈¤繍綆楀悗
+-------------------------------+
Copyright
涔熷緢寮?br>writeln('Matrix' , 42 XOR 105 , '鍘熷垱錛岃漿璐磋娉ㄦ槑鍑哄');
浠婂ぉ鎴戜滑鏉ョ湅涓や釜紼嶅井澶嶆潅涓鐐圭殑渚嬪瓙銆?br>
n鐨囧悗闂浣嶈繍綆楃増
n鐨囧悗闂鏄暐鎴戝氨涓嶈浜嗗惂錛屽緙栫▼鐨勮偗瀹氶兘瑙佽繃銆備笅闈?
鐨勫崄澶氳浠g爜鏄痭鐨囧悗闂鐨勪竴涓珮鏁堜綅榪愮畻紼嬪簭錛岀湅鍒拌繃鐨勪漢閮藉じ瀹冪墰銆傚垵濮嬫椂錛寀pperlim:=(1 shl
n)-1銆備富紼嬪簭璋冪敤test(0,0,0)鍚巗um鐨勫煎氨鏄痭鐨囧悗鎬葷殑瑙f暟銆傛嬁榪欎釜鍘諱氦USACO錛?.3s錛屾毚鐖姐?br>procedure
test(row,ld,rd:longint);
var
pos,p:longint;
begin
{
1} if row<>upperlim then
{ 2} begin
{ 3}
pos:=upperlim and not (row or ld or rd);
{ 4} while pos<>0
do
{ 5} begin
{ 6} p:=pos and -pos;
{
7} pos:=pos-p;
{ 8} test(row+p,(ld+p)shl 1,(rd+p)shr
1);
{ 9} end;
{10} end
{11} else inc(sum);
end;
涔?
涓鐪嬩技涔庡畬鍏ㄦ懜涓嶇潃澶磋剳錛屽疄闄呬笂鏁翠釜紼嬪簭鏄潪甯稿鏄撶悊瑙g殑銆傝繖閲岃繕鏄緩璁ぇ瀹惰嚜宸卞崟姝ヨ繍琛屼竴鎺㈢┒绔燂紝瀹炲湪娌$爺絀跺嚭鏉ュ啀鐪嬩笅闈㈢殑瑙h銆?br>

鍜?
鏅氱畻娉曚竴鏍鳳紝榪欐槸涓涓掑綊榪囩▼錛岀▼搴忎竴琛屼竴琛屽湴瀵繪壘鍙互鏀劇殗鍚庣殑鍦版柟銆傝繃紼嬪甫涓変釜鍙傛暟錛宺ow銆乴d鍜宺d錛屽垎鍒〃紺哄湪綰靛垪鍜屼袱涓瑙掔嚎鏂瑰悜鐨勯檺鍒舵潯浠?
涓嬭繖涓琛岀殑鍝簺鍦版柟涓嶈兘鏀俱傛垜浠互6×6鐨勬鐩樹負(fù)渚嬶紝鐪嬬湅紼嬪簭鏄庝箞宸ヤ綔鐨勩傚亣璁劇幇鍦ㄥ凡緇忛掑綊鍒扮鍥涘眰錛屽墠涓夊眰鏀劇殑瀛愬凡緇忔爣鍦ㄥ乏鍥句笂浜嗐傜孩鑹層佽摑鑹插拰緇胯壊
鐨勭嚎鍒嗗埆琛ㄧず涓変釜鏂瑰悜涓婃湁鍐茬獊鐨勪綅緗紝浣嶄簬璇ヨ涓婄殑鍐茬獊浣嶇疆灝辯敤row銆乴d鍜宺d涓殑1鏉ヨ〃紺恒傛妸瀹冧滑涓変釜騫惰搗鏉ワ紝寰楀埌璇ヨ鎵鏈夌殑紱佷綅錛屽彇鍙嶅悗灝卞緱鍒版墍
鏈夊彲浠ユ斁鐨勪綅緗紙鐢╬os鏉ヨ〃紺猴級銆傚墠闈㈣榪?a鐩稿綋浜巒ot a + 1錛岃繖閲岀殑浠g爜絎?琛屽氨鐩稿綋浜巔os and (not pos +
1)錛屽叾緇撴灉鏄彇鍑烘渶鍙寵竟鐨勯偅涓?銆傝繖鏍鳳紝p灝辮〃紺鴻琛岀殑鏌愪釜鍙互鏀懼瓙鐨勪綅緗紝鎶婂畠浠巔os涓Щ闄ゅ茍閫掑綊璋冪敤test榪囩▼銆傛敞鎰忛掑綊璋冪敤鏃朵笁涓弬鏁扮殑鍙?
鍖栵紝姣忎釜鍙傛暟閮藉姞涓婁簡涓涓浣嶏紝浣嗕袱涓瑙掔嚎鏂瑰悜鐨勭浣嶅涓嬩竴琛岀殑褰卞搷闇瑕佸鉤縐諱竴浣嶃傛渶鍚庯紝濡傛灉閫掑綊鍒版煇涓椂鍊欏彂鐜皉ow=111111浜嗭紝璇存槑鍏釜鐨囧悗
鍏ㄦ斁榪涘幓浜嗭紝姝ゆ椂紼嬪簭浠庣1琛岃煩鍒扮11琛岋紝鎵懼埌鐨勮В鐨勪釜鏁板姞涓銆?br>
~~~~====~~~~===== 鍗庝附鐨勫垎鍓茬嚎
=====~~~~====~~~~
Gray鐮?br> 鍋囧鎴戞湁4涓綔鍦ㄧ殑GF錛屾垜闇瑕佸喅瀹氭渶緇堝埌搴曞拰璋佸湪涓璧楓備竴涓畝鍗曠殑鍔炴硶
灝辨槸錛屼緷嬈″拰姣忎釜MM浜ゅ線涓孌墊椂闂達(dá)紝鏈鍚庨夋嫨緇欐垜甯︽潵鐨?#8220;婊℃剰搴?#8221;鏈澶х殑MM銆備絾鐪嬩簡dd鐗涚殑鐞嗚鍚庯紝
浜嬫儏寮濮嬪彉寰楀鏉備簡錛氭垜鍙互閫夋嫨鍜屽涓狹M鍦ㄤ竴璧楓傝繖鏍鳳紝闇瑕佽冩牳鐨勭姸鎬佸彉鎴愪簡2^4=16縐嶏紙褰撶劧鍖呮嫭0000榪欎竴鐘舵侊紝鍥犱負(fù)鎴戞湁鍙兘鏄幓鐠冿級銆傜幇鍦ㄧ殑
闂灝辨槸錛屾垜搴旇鐢ㄤ粈涔堥『搴忔潵閬嶅巻榪?6縐嶇姸鎬佸憿錛?br> 浼犵粺鐨勫仛娉曟槸錛岀敤浜岃繘鍒舵暟鐨勯『搴忔潵閬嶅巻鎵鏈夊彲鑳界殑緇勫悎銆備篃灝辨槸璇達(dá)紝鎴戦渶瑕佷互
0000->0001->0010->0011->0100->…->1111榪欐牱鐨勯『搴忓姣忕鐘舵佽繘琛屾祴璇曘傝繖涓?
欏哄簭寰堜笉縐戝錛屽緢澶氭椂鍊欑姸鎬佺殑杞Щ閮藉緢鑰楁椂銆傛瘮濡備粠0111鍒?000鏃舵垜闇瑕佹殏鏃剁敥鎺夊綋鍓嶆墍鏈夌殑3涓狹M錛岀劧鍚庡幓鎶婄4涓狹M銆傚悓鏃舵敼鍙樻墍鏈塎M涓庢垜鐨?
鍏崇郴鏄竴浠朵綍絳夊法澶х殑宸ョ▼鍟娿傚洜姝わ紝鎴戝笇鏈涚煡閬擄紝鏄惁鏈変竴縐嶆柟娉曞彲浠ヤ嬌寰楋紝浠庢病鏈塎M榪欎竴鐘舵佸嚭鍙戯紝姣忔鍙敼鍙樻垜鍜屼竴涓狹M鐨勫叧緋伙紙榪芥垨鑰呯敥錛夛紝15嬈℃搷
浣滃悗鎭板ソ閬嶅巻瀹屾墍鏈夊彲鑳界殑緇勫悎錛堟渶緇堢姸鎬佷笉涓瀹氭槸1111錛夈傚ぇ瀹惰嚜宸卞厛璇曚竴璇曠湅琛屼笉琛屻?br> 瑙e喅榪欎釜闂鐨勬柟娉曞緢宸у銆傛垜浠潵璇存槑錛屽亣濡傛垜
浠凡緇忕煡閬撲簡n=2鏃剁殑鍚堟硶閬嶅巻欏哄簭錛屾垜浠浣曞緱鍒皀=3鐨勯亶鍘嗛『搴忋傛樉鐒?dòng)灱宯=2鐨勯亶鍘嗛『搴忓涓嬶細(xì)
00
01
11
10
浣?
鍙兘宸茬粡鎯沖埌浜嗗浣曟妸涓婇潰鐨勯亶鍘嗛『搴忔墿灞曞埌n=3鐨勬儏鍐點(diǎn)俷=3鏃朵竴鍏辨湁8縐嶇姸鎬侊紝鍏朵腑鍓嶉潰4涓妸n=2鐨勯亶鍘嗛『搴忕収鎼笅鏉ワ紝鐒跺悗鎶婂畠浠縐扮炕鎶樹笅鍘誨茍鍦?
鏈鍓嶉潰鍔犱笂1浣滀負(fù)鍚庨潰4涓姸鎬侊細(xì)
000
001
011
010 ↑
--------
110 ↓
111
101
100
鐢?
榪欑鏂規(guī)硶寰楀埌鐨勯亶鍘嗛『搴忔樉鐒剁鍚堣姹傘傞鍏堬紝涓婇潰8涓姸鎬佹伆濂芥槸n=3鏃剁殑鎵鏈?縐嶇粍鍚堬紝鍥犱負(fù)瀹冧滑鏄湪n=2鐨勫叏閮ㄥ洓縐嶇粍鍚堢殑鍩虹涓婅冭檻閫変笉閫夌3涓厓绱?
鎵寰楀埌鐨勩傜劧鍚庢垜浠湅鍒幫紝鍚庨潰涓鍗婄殑鐘舵佸簲璇ュ拰鍓嶉潰涓鍗婁竴鏍鋒弧瓚?#8220;鐩擱偦鐘舵侀棿浠呬竴浣嶄笉鍚?#8221;鐨勯檺鍒訛紝鑰?#8220;闀滈潰”澶勫垯鏄渶鍓嶉潰閭d竴浣嶆暟涓嶅悓銆傚啀嬈$炕鎶樹笁闃墮亶鍘?
欏哄簭錛屾垜浠氨寰楀埌浜嗗垰鎵嶇殑闂鐨勭瓟妗堬細(xì)
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
榪?
縐嶉亶鍘嗛『搴忎綔涓轟竴縐嶇紪鐮佹柟寮忓瓨鍦紝鍙仛Gray鐮侊紙鍐欎釜涓枃璁╄湗铔涙潵鎶擄細(xì)鏍奸浄鐮侊級銆傚畠鐨勫簲鐢ㄨ寖鍥村緢騫褲傛瘮濡傦紝n闃剁殑Gray鐮佺浉褰撲簬鍦╪緇寸珛鏂逛綋涓婄殑
Hamilton鍥炶礬錛屽洜涓烘部鐫绔嬫柟浣撲笂鐨勮竟璧頒竴姝ワ紝n緇村潗鏍囦腑鍙細(xì)鏈変竴涓兼敼鍙樸傚啀姣斿錛孏ray鐮佸拰Hanoi濉旈棶棰樼瓑浠楓侴ray鐮佹敼鍙樼殑鏄鍑犱釜
鏁幫紝Hanoi濉斿氨璇ョЩ鍔ㄥ摢涓洏瀛愩傛瘮濡傦紝3闃剁殑Gray鐮佹瘡嬈℃敼鍙樼殑鍏冪礌鎵鍦ㄤ綅緗緷嬈′負(fù)1-2-1-3-1-2-1錛岃繖姝eソ鏄?闃禜anoi濉旀瘡嬈$Щ鍔?
鐩樺瓙緙栧彿銆傚鏋滄垜浠彲浠ュ揩閫熸眰鍑篏ray鐮佺殑絎琻涓暟鏄灝戯紝鎴戜滑灝卞彲浠ヨ緭鍑轟換鎰忔鏁板悗Hanoi濉旂殑縐誨姩姝ラ銆傜幇鍦ㄦ垜鍛婅瘔浣狅紝Gray鐮佺殑絎琻涓暟錛堜粠
0綆楄搗錛夋槸n xor (n shr 1)錛屼綘鑳芥兂鍑烘潵榪欐槸涓轟粈涔堝悧錛熷厛鑷繁鎯蟲兂鍚с?br>
涓嬮潰鎴戜滑鎶婁簩榪涘埗鏁板拰Gray鐮侀兘鍐欏湪涓?
闈紝鍙互鐪嬪埌宸﹁竟鐨勬暟寮傛垨鑷韓鍙崇Щ鐨勭粨鏋滃氨絳変簬鍙寵竟鐨勬暟銆?br>
浜岃繘鍒舵暟 Gray鐮?br> 000 000
001 001
010 011
011 010
100
110
101 111
110 101
111 100
浠?
浜岃繘鍒舵暟鐨勮搴︾湅錛?#8220;闀滃儚”浣嶇疆涓婄殑鏁板嵆鏄鍘熸暟榪涜not榪愮畻鍚庣殑緇撴灉銆傛瘮濡傦紝絎?涓暟010鍜屽掓暟絎?涓暟101鐨勬瘡涓浣嶉兘姝eソ鐩稿弽銆傚亣璁捐繖涓や釜鏁板垎
鍒負(fù)x鍜寉錛岄偅涔坸 xor (x shr 1)鍜寉 xor (y shr
1)鐨勭粨鏋滃彧鏈変竴鐐逛笉鍚岋細(xì)鍚庤呯殑棣栦綅鏄?錛屽墠鑰呯殑棣栦綅鏄?銆傝岃繖姝eソ鏄疓ray鐮佺殑鐢熸垚鏂規(guī)硶銆傝繖灝辮鏄庝簡錛孏ray鐮佺殑絎琻涓暟紜疄鏄痭 xor (n
shr 1)銆?br>
浠婂勾鍥涙湀浠?a target="_blank">mashuo緇?
鎴戠湅浜?a target="_blank">榪欓亾棰?/a>錛屾槸浜岀淮鎰忎箟涓婄殑Gray鐮併傞鐩ぇ鎰忔槸璇達(dá)紝鎶?鍒?^(n+m)-1鐨勬暟鍐欐垚2^n *
2^m鐨勭煩闃碉紝浣垮緱浣嶇疆鐩擱偦涓ゆ暟鐨勪簩榪涘埗琛ㄧず鍙湁涓浣嶄箣宸傜瓟妗堝叾瀹炲緢綆鍗曪紝鎵鏈夋暟閮芥槸鐢眒浣嶇殑Gray鐮佸拰n浣岹ray鐮佹嫾鎺ヨ屾垚錛岄渶瑕佺敤宸︾Щ鎿嶄綔鍜?
or榪愮畻瀹屾垚銆傚畬鏁寸殑浠g爜濡備笅錛?br>var
x,y,m,n,u:longint;
begin
readln(m,n);
for x:=0 to 1 shl m-1 do begin
u:=(x xor (x
shr 1)) shl n; //杈撳嚭鏁扮殑宸﹁竟鏄竴涓猰浣嶇殑Gray鐮?br> for y:=0 to 1 shl n-1 do
write(u or (y xor (y shr 1)),' '); //騫朵笂涓涓猲浣岹ray鐮?br> writeln;
end;
end.
Matrix67鍘熷垱
杞創(chuàng)璇鋒敞鏄庡嚭澶?/p>
浣嶈繍綆楃畝浠嬪強(qiáng)瀹炵敤鎶宸э紙鍥涳級錛氬疄鎴樼瘒
涓嬮潰
鍒嗕韓鐨勬槸鎴戣嚜宸卞啓鐨勪笁涓唬鐮侊紝閲岄潰鏈変簺棰樼洰涔熸槸鎴戣嚜宸卞嚭鐨勩傝繖浜涗唬鐮侀兘鏄湪鎴戠殑Pascal鏃朵唬鍐欑殑錛屾仌涓嶆彁渚汣璇█浜嗐備唬鐮佸啓寰楀茍涓嶅ソ錛屾垜鍙槸鎯沖憡璇夊ぇ
瀹朵綅榪愮畻鍦ㄥ疄鎴樹腑鐨勫簲鐢紝鍖呮嫭浜嗘悳绱㈠拰鐘舵佸帇緙〥P鏂歸潰鐨勯鐩傚叾瀹炲ぇ瀹跺彲浠ュ湪緗戜笂鎵懼埌鏇村鐢ㄤ綅榪愮畻浼樺寲鐨勯鐩紝榪欓噷鏁寸悊鍑轟竴浜涜嚜宸卞啓鐨勪唬鐮侊紝鍙槸涓轟簡鍘?
鍒涚郴鍒楁枃绔犵殑瀹屾暣鎬с傝繖涓緋誨垪鏂囩珷鍒拌繖閲屽氨緇撴潫浜嗭紝甯屾湜澶у鑳芥湁鎵鏀惰幏銆?br> Matrix67鍘熷垱錛岃漿璐磋娉ㄦ槑鍑哄銆?br>
Problem : 璐硅В鐨勫紑鍏?br>
棰樼洰鏉ユ簮
06 騫碞OIp妯℃嫙璧涳紙涓錛?by Matrix67 絎洓棰?br>
闂鎻忚堪
浣犵帺榪?#8220;鎷夌伅”娓告垙鍚楋紵25鐩忕伅鎺掓垚涓涓?×5鐨勬柟 褰€傛瘡涓涓伅閮芥湁涓涓紑鍏籌紝娓告垙鑰呭彲浠ユ敼鍙樺畠鐨勭姸鎬併傛瘡涓姝ワ紝娓告垙鑰呭彲浠ユ敼鍙樻煇涓涓伅鐨勭姸鎬併傛父鎴忚呮敼鍙樹竴涓伅鐨勭姸鎬佷細(xì)浜х敓榪為攣鍙嶅簲錛氬拰榪欎釜鐏笂涓嬪乏鍙崇浉 閭?cè)潥勭伅涔熻鐩稿簲鍦版敼鍙樺叾鐘舵併?br> 鎴戜滑鐢ㄦ暟瀛?#8220;1”琛ㄧず涓鐩忓紑鐫鐨勭伅錛岀敤鏁板瓧“0”琛ㄧず鍏崇潃鐨勭伅銆備笅闈㈣繖縐嶇姸鎬?br>
10111
01101
10111
10000
11011
鍦? 鏀瑰彉浜嗘渶宸︿笂瑙掔殑鐏殑鐘舵佸悗灝嗗彉鎴愶細(xì)
01111
11101
10111
10000
11011
鍐? 鏀瑰彉瀹冩涓棿鐨勭伅鍚庣姸鎬佸皢鍙樻垚錛?br>
01111
11001
11001
10100
11011
緇? 瀹氫竴浜涙父鎴忕殑鍒濆鐘舵侊紝緙栧啓紼嬪簭鍒ゆ柇娓告垙鑰呮槸鍚﹀彲鑳藉湪6姝ヤ互鍐呬嬌鎵鏈夌殑鐏兘鍙樹寒銆?br>
杈撳叆鏍煎紡
絎竴琛屾湁涓涓鏁存暟n錛屼唬琛ㄦ暟 鎹腑鍏辨湁n涓緟瑙e喅鐨勬父鎴忓垵濮嬬姸鎬併?br> 浠ヤ笅鑻ュ共琛屾暟鎹垎涓簄緇勶紝姣忕粍鏁版嵁鏈?琛岋紝姣忚5涓瓧絎︺傛瘡緇勬暟鎹弿榪頒簡涓涓父鎴忕殑鍒濆鐘舵併傚悇緇勬暟 鎹棿鐢ㄤ竴涓┖琛屽垎闅斻?br> 瀵逛簬30%鐨勬暟鎹紝n<=5錛?br> 瀵逛簬100%鐨勬暟鎹紝n<=500銆?br>
杈? 鍑烘牸寮?br> 杈撳嚭鏁版嵁涓鍏辨湁n琛岋紝姣忚鏈変竴涓皬浜庣瓑浜?鐨勬暣鏁幫紝瀹冭〃紺哄浜庤緭鍏ユ暟鎹腑瀵瑰簲鐨勬父鎴忕姸鎬佹渶灝戦渶瑕佸嚑姝ユ墠鑳戒嬌鎵鏈夌伅鍙樹寒銆?br> 瀵? 浜庢煇涓涓父鎴忓垵濮嬬姸鎬侊紝鑻?姝ヤ互鍐呮棤娉曚嬌鎵鏈夌伅鍙樹寒錛岃杈撳嚭“-1”銆?br>
鏍蜂緥杈撳叆
3
00111
01011
10001
11010
11100
11101
11101
11110
11111
11111
01111
11111
11111
11111
11111
鏍? 渚嬭緭鍑?br>3
2
-1
紼嬪簭浠g爜const
BigPrime=3214567;
MaxStep=6;
type
pointer=^rec;
rec=record
v:longint;
step:integer;
next:pointer;
end;
var
total:longint;
hash:array[0..BigPrime-1]of pointer;
q:array[1..400000]of rec;
function
update(a:longint;p:integer):longint;
begin
a:=a xor (1 shl p);
if p mod 5<>0 then a:=a xor (1 shl (p-1));
if (p+1) mod
5<>0 then a:=a xor (1 shl (p+1));
if p<20 then a:=a xor
(1 shl (p+5));
if p>4 then a:=a xor (1 shl (p-5));
exit(a);
end;
function find(a:longint;step:integer):boolean;
var
now:pointer;
begin
now:=hash[a mod BigPrime];
while
now<>nil do
begin
if now^.v=a then exit(true);
now:=now^.next;
end;
new(now);
now^.v:=a;
now^.step:=step;
now^.next:=hash[a mod BigPrime];
hash[a mod BigPrime]:=now;
total:=total+1;
exit(false);
end;
procedure solve;
var
p:integer;
close:longint=0;
open:longint=1;
begin
find(1 shl 25-1,0);
q[1].v:=1 shl 25-1;
q[1].step:=0;
repeat
inc(close);
for p:=0 to 24 do
if
not find(update(q[close].v,p),q[close].step+1) and
(q[close].step+1<MaxStep) then
begin
open:=open+1;
q[open].v:=update(q[close].v,p);
q[open].step:=q[close].step+1;
end;
until close>=open;
end;
procedure
print(a:longint);
var
now:pointer;
begin
now:=hash[a
mod BigPrime];
while now<>nil do
begin
if
now^.v=a then
begin
writeln(now^.step);
exit;
end;
now:=now^.next;
end;
writeln(-1);
end;
procedure main;
var
ch:char;
i,j,n:integer;
t:longint;
begin
readln(n);
for i:=1
to n do
begin
t:=0;
for j:=1 to 25 do
begin
read(ch);
t:=t*2+ord(ch)-48;
if j mod 5=0 then
readln;
end;
print(t);
if i<n then readln;
end;
end;
begin
solve;
main;
end.
======================= 鎬?
鎰熺殑鍒嗗壊綰?nbsp; =======================
Problem : garden / 鍜孧M閫涜姳鍥?br>
棰樼洰鏉ユ簮
07騫碝atrix67鐢熸棩閭(gè)璇瘋禌 絎? 鍥涢
闂鎻忚堪
鑺卞洯璁捐寮鴻皟錛岀畝鍗曞氨鏄編銆侻atrix67甯稿幓鐨勮姳鍥湁鐫闈炲父綆鍗曠殑甯冨眬錛氳姳鍥殑鎵鏈夋櫙鐐圭殑浣嶇疆閮芥槸“瀵? 榻?#8221;浜嗙殑錛岃繖浜涙櫙鐐瑰彲浠ョ湅浣滄槸騫抽潰鍧愭爣涓婄殑鏍肩偣銆傜浉閭?cè)潥勬櫙鐐逛箣闂存湁灏忚矾鐩笜q烇紝榪欎簺灝忚礬鍏ㄩ儴騫寵浜庡潗鏍囪醬銆傛櫙鐐瑰拰灝忚礬緇勬垚浜嗕竴涓?#8220;涓嶅畬鏁寸殑緗戞牸”銆?br> 涓 涓吀鍨嬬殑鑺卞洯甯冨眬濡傚乏鍥炬墍紺恒傝姳鍥竷灞鍦?琛?鍒楃殑緗戞牸涓婏紝鑺卞洯鐨?6涓櫙鐐圭殑浣嶇疆鐢ㄧ孩鑹叉爣娉ㄥ湪浜嗗浘涓傞粦鑹茬嚎鏉¤〃紺烘櫙鐐歸棿鐨勫皬璺紝鍏朵綑鐏拌壊閮ㄥ垎瀹為檯騫朵笉 瀛樺湪銆?br>
Matrix67 鐨勭敓鏃ラ偅澶╋紝浠栬甯︾潃浠栫殑MM鍦ㄨ姳鍥噷娓哥帺銆侻atrix67涓嶄細(xì)甯M涓ゆ緇忚繃鍚屼竴涓櫙鐐癸紝鍥犳姣忎釜鏅偣鏈澶氳娓歌涓嬈°備粬鍜屼粬鐨凪M杈硅蛋杈硅亰錛屼粬浠槸 濡傛鐨勬姇鍏ヤ互鑷翠簬浠栦滑浠庝笉浼?#8220;涓誨姩鍦版嫄寮?#8221;銆備篃灝辨槸璇達(dá)紝闄ら潪鍓嶆柟宸叉病鏈夋櫙鐐規(guī)垨鏄墠鏂圭殑鏅偣宸茬粡璁塊棶榪囷紝鍚﹀垯浠栦滑浼?xì)涓鐩村線鍓嶈蛋涓嬪幓銆傚綋鍓嶆柟鏅偣涓嶅瓨鍦ㄦ垨宸叉父 瑙堣繃鏃訛紝Matrix67浼?xì)甯M鍙﹂変竴涓柟鍚戠戶緇墠榪涖傜敱浜庢櫙鐐逛釜鏁版湁闄愶紝璁塊棶榪囩殑鏅偣灝嗚秺鏉ヨ秺澶氾紝榪熸棭浼?xì)鍑虹庮C笉鑳藉啀璧扮殑鎯呭喌錛堝嵆鍥涗釜鏂瑰悜涓婄殑鐩擱偦鏅偣 閮借闂繃浜嗭級錛屾鏃朵粬浠皢緇撴潫鑺卞洯鐨勬父瑙堛侻atrix67甯屾湜鐭ラ亾浠ヨ繖縐嶆柟寮忔父瑙堣姳鍥槸鍚︽湁鍙兘閬嶅巻鎵鏈夌殑鏅偣銆侻atrix67鍙互閫夋嫨浠庝換鎰忎竴涓櫙 鐐瑰紑濮嬫父瑙堬紝浠ヤ換鎰忎竴涓櫙鐐圭粨鏉熴?br> 鍦ㄤ笂鍥炬墍紺虹殑鑺卞洯甯冨眬涓紝涓縐嶅彲鑳界殑娓歌鏂瑰紡濡傚彸鍥炬墍紺恒傝繖縐嶆祻瑙堟柟寮忎粠(1,2)鍑哄彂錛屼互(2,4) 緇撴潫錛岀粡榪囨瘡涓櫙鐐規(guī)伆濂戒竴嬈°?br>
杈撳叆鏍煎紡
絎竴琛岃緭鍏ヤ袱涓敤絀烘牸闅斿紑鐨勬鏁存暟m鍜宯錛岃〃紺鴻姳鍥甯冨眬鍦╩琛宯鍒楃殑緗戞牸涓娿?br> 浠? 涓媘琛屾瘡琛宯涓瓧絎︼紝瀛楃“0”琛ㄧず璇ヤ綅緗病鏈夋櫙鐐癸紝瀛楃“1”琛ㄧず瀵瑰簲浣嶇疆鏈夋櫙鐐廣傝繖浜涙暟瀛椾箣闂存病鏈夌┖鏍箋?br>
杈撳嚭鏍煎紡
浣? 鐨勭▼搴忛渶瑕佸鎵炬弧瓚?#8220;涓嶄富鍔ㄦ嫄寮?#8221;鎬ц川涓旈亶鍘嗘墍鏈夋櫙鐐圭殑娓歌璺嚎銆?br> 濡傛灉娌℃湁榪欐牱鐨勬父瑙堣礬綰匡紝璇瘋緭鍑轟竴琛?#8220;Impossible”錛堜笉甯﹀紩 鍙鳳紝娉ㄦ剰澶у皬鍐欙級銆?br> 濡傛灉瀛樺湪娓歌璺嚎錛岃渚濇杈撳嚭浣犵殑鏂規(guī)涓闂殑鏅偣鐨勫潗鏍囷紝姣忚杈撳嚭涓涓傚潗鏍囩殑琛ㄧず鏍煎紡涓?#8220;(x,y)”錛屼唬琛ㄧx 琛岀y鍒椼?br> 濡傛灉鏈夊縐嶆柟妗堬紝浣犲彧闇瑕佽緭鍑哄叾涓竴縐嶅嵆鍙傝瘎嫻嬬郴緇熷彲浠ュ垽鏂綘鐨勬柟妗堢殑姝g‘鎬с?br>
鏍蜂緥杈撳叆
6 4
1100
1001
1111
1100
1110
1110
鏍? 渚嬭緭鍑?br>(1,2)
(1,1)
(2,1)
(3,1)
(4,1)
(5,1)
(6,1)
(6,2)
(6,3)
(5,3)
(5,2)
(4,2)
(3,2)
(3,3)
(3,4)
(2,4)
鏁? 鎹妯?br> 瀵逛簬30%鐨勬暟鎹紝n,m<=5錛?br> 瀵逛簬100%鐨勬暟鎹紝n,m<=10銆?
紼嬪簭浠g爜錛?br>program garden;
const
dir:array[1..4,1..2]of integer=
((1,0),(0,1),(-1,0),(0,-1));
type
arr=array[1..10]of integer;
rec=record x,y:integer;end;
var
map:array[0..11,0..11]of boolean;
ans:array[1..100]of rec;
n,m,max:integer;
step:integer=1;
state:arr;
procedure
readp;
var
i,j:integer;
ch:char;
begin
readln(m,n);
for i:=1 to n do
begin
for j:=1 to m
do
begin
read(ch);
map[i,j]:=(ch='1');
inc(max,ord( map[i,j] ))
end;
readln;
end;
end;
procedure
writep;
var
i:integer;
begin
for i:=1 to step do
writeln(
'(' , ans[i].x , ',' , ans[i].y , ')' );
end;
procedure
solve(x,y:integer);
var
tx,ty,d:integer;
step_cache:integer;
state_cache:arr;
begin
step_cache:=step;
state_cache:=state;
if step=max then
begin
writep;
exit;
end;
for d:=1 to 4
do
begin
tx:=x+dir[d,1];
ty:=y+dir[d,2];
while
map[tx,ty] and ( not state[tx] and(1 shl (ty-1) )>0) do
begin
inc(step);
ans[step].x:=tx;
ans[step].y:=ty;
state[tx]:=state[tx] or ( 1 shl (ty-1) );
tx:=tx+dir[d,1];
ty:=ty+dir[d,2];
end;
tx:=tx-dir[d,1];
ty:=ty-dir[d,2];
if
(tx<>x) or (ty<>y) then solve(tx,ty);
state:=state_cache;
step:=step_cache;
end;
end;
{====main====}
var
i,j:integer;
begin
assign(input,'garden.in');
reset(input);
assign(output,'garden.out');
rewrite(output);
readp;
for i:=1 to n do
for j:=1 to m do
if map[i,j] then
begin
ans[1].x:=i;
ans[1].y:=j;
state[i]:=1
shl (j-1);
solve(i,j);
state[i]:=0;
end;
close(input);
close(output);
end.
======================= 鎬?
鎰熺殑鍒嗗壊綰?nbsp; =======================
Problem : cowfood / 鐜夌背鍦?br>
棰樼洰鏉ユ簮
USACO鏈堣禌
闂? 棰樻弿榪?br> 鍐滃か綰︾堪璐拱浜嗕竴澶勮偉娌冪殑鐭╁艦鐗у満錛屽垎鎴怣*N(1<=M<=12; 1<=N<=12)涓牸瀛愩備粬鎯沖湪閭i噷鐨勪竴浜涙牸瀛愪腑縐嶆緹庡懗鐨勭帀綾熾傞仐鎲劇殑鏄紝鏈変簺鏍煎瓙鍖哄煙鐨勫湡鍦版槸璐槧鐨勶紝涓嶈兘鑰曠銆?br> 綺炬槑 鐨勭害緲扮煡閬撳ザ鐗涗滑榪涢鏃朵笉鍠滄鍜屽埆鐨勭墰鐩擱偦錛屾墍浠ヤ竴鏃﹀湪涓涓牸瀛愪腑縐嶆鐜夌背錛岄偅涔堜粬灝變笉浼?xì)鍦ㄧ洈R偦鐨勬牸瀛愪腑縐嶆錛屽嵆娌℃湁涓や釜琚変腑鐨勬牸瀛愭嫢鏈夊叕鍏辮竟銆備粬榪樻病 鏈夋渶緇堢‘瀹氬摢浜涙牸瀛愯閫夋嫨縐嶆鐜夌背銆?br> 浣滀負(fù)涓涓濇兂寮鏄庣殑浜猴紝鍐滃か綰︾堪甯屾湜鑰冭檻鎵鏈夊彲琛岀殑閫夋嫨鏍煎瓙縐嶆鏂規(guī)銆傜敱浜庡お寮鏄庯紝浠栬繕鑰冭檻涓涓牸瀛? 閮戒笉閫夋嫨鐨勭妞嶆柟妗堬紒璇峰府鍔╁啘澶害緲扮‘瀹氱妞嶆柟妗堟繪暟銆?br>
杈撳叆鏍煎紡:
絎竴琛岋細(xì)涓や釜鐢ㄧ┖鏍煎垎闅旂殑鏁存暟M鍜孨
絎? 浜岃鍒扮M+1琛岋細(xì)絎琲+1琛屾弿榪扮墽鍦虹i琛屾瘡涓牸瀛愮殑鎯呭喌錛孨涓敤絀烘牸鍒嗛殧鐨勬暣鏁幫紝琛ㄧず榪欎釜鏍煎瓙鏄惁鍙互縐嶆錛?琛ㄧず鑲ユ矁鐨勩侀傚悎縐嶆錛?琛ㄧず璐槧鐨勩? 涓嶅彲縐嶆錛?br>
杈撳嚭鏍煎紡
涓涓暣鏁幫紝鍐滃か綰︾堪鍙夋嫨鐨勬柟妗堟繪暟闄や互 100,000,000 鐨勪綑鏁?br>
鏍蜂緥杈撳叆
2 3
1 1 1
0 1 0
鏍蜂緥杈撳嚭
9
鏍蜂緥璇存槑
緇欏彲浠ョ妞嶇帀綾崇殑鏍煎瓙緙? 鍙鳳細(xì)
1 2 3
4
鍙? 縐嶄竴涓牸瀛愮殑鏂規(guī)鏈夊洓縐?1,2,3鎴?)錛岀妞嶄袱涓牸瀛愮殑鏂規(guī)鏈変笁縐?13,14鎴?4)錛岀妞嶄笁涓牸瀛愮殑鏂規(guī)鏈変竴縐?134)錛岃繕鏈変竴縐嶄粈涔堟牸瀛愰兘涓? 縐嶃?br> 4+3+1+1=9銆?br>
鏁版嵁瑙勬ā
瀵逛簬30%鐨勬暟鎹紝N,M<=4錛?br> 瀵逛簬 100%鐨勬暟鎹紝N,M<=12銆?
紼嬪簭浠g爜錛?br>program cowfood;
const
d=100000000;
MaxN=12;
var
f:array[0..MaxN,1..2000]of
longint;
w:array[1..2000,1..2000]of boolean;
st:array[0..2000]of integer;
map:array[0..MaxN]of integer;
m,n:integer;
function Impossible(a:integer):boolean;
var
i:integer;
flag:boolean=false;
begin
for i:=1 to MaxN do
begin
if flag and (a and 1=1) then exit(true);
flag:=(a
and 1=1);
a:=a shr 1;
end;
exit(false);
end;
function
Conflict(a,b:integer):boolean;
var
i:integer;
begin
for i:=1 to MaxN do
begin
if (a and 1=1) and (b and 1=1)
then exit(true);
a:=a shr 1;
b:=b shr 1;
end;
exit(false);
end;
function CanPlace(a,b:integer):boolean;
begin
exit(a or b=b);
end;
procedure FindSt;
var
i:integer;
begin
for i:=0 to 1 shl MaxN-1 do
if not
Impossible(i) then
begin
inc(st[0]);
st[st[0]]:=i;
end;
end;
procedure Init;
var
i,j:integer;
begin
for i:=1 to st[0] do
for j:=i to
st[0] do
if not Conflict(st[i],st[j]) then
begin
w[i,j]:=true;
w[j,i]:=true;
end;
end;
procedure
Readp;
var
i,j,t,v:integer;
begin
readln(m,n);
for i:=1 to m do
begin
v:=0;
for j:=1 to n do
begin
read(t);
v:=v*2+t;
end;
map[i]:=v;
readln;
end;
end;
procedure Solve;
var
i,j,k:integer;
begin
f[0,1]:=1;
map[0]:=1 shl n-1;
for i:=1 to m do
for
j:=1 to st[0] do
if not CanPlace(st[j],map[i]) then f[i,j]:=-1
else
for k:=1 to st[0] do if (f[i-1,k]<>-1) and w[j,k]
then
f[i,j]:=(f[i,j]+f[i-1,k]) mod d;
end;
procedure
Writep;
var
j:integer;
ans:longint=0;
begin
for
j:=1 to st[0] do
if f[m,j]<>-1 then ans:=(ans+f[m,j])
mod d;
writeln(ans);
end;
begin
assign(input,'cowfood.in');
reset(input);
assign(output,'cowfood.out');
rewrite(output);
FindSt;
Init;
Readp;
Solve;
Writep;
close(input);
close(output);
end.
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
銆
銆// Set a timer to destroy the splash screen.
銆SetTimer(1, 750, NULL); //淇敼絎簩涓弬鏁頒互璋冩暣鐢婚潰鍋滅暀鏃墮棿
銆return 0;
}
#include “SplashDlg.h” //鍔犲埌MainFrm.cpp鏂囦歡鐨勫ご鏂囦歡璋冪敤閮ㄤ綅
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
銆CSplashDlg *dlg = new CSplashDlg(this);
銆dlg->Create(CSplashDlg::IDD,this); //鍒涘緩瀵硅瘽妗?br>
銆dlg->ShowWindow(SW_SHOW); //鏄劇ず瀵硅瘽妗?br>
銆dlg->UpdateWindow();
銆Sleep(2000); //鐢婚潰鏄劇ず鍋滅暀鏃墮棿錛屽崟浣嶄負(fù)姣
銆…
銆dlg->DestroyWindow(); //閿姣佸璇濇
銆return 0;
} 
void CMainFrame::OnTimer(UINT nIDEvent) 
{
銆if(Splash->IsWindowVisible())
{
銆銆Splash->SetActiveWindow(); //鎶婂惎鍔ㄧ敾闈㈣緗負(fù)褰撳墠媧誨姩紿楀彛
銆銆Splash->UpdateWindow();
銆銆Sleep(2000); //淇敼姝ゅ鍙洿鏀圭敾闈㈡樉紺烘椂闂?br>
銆銆Splash->SendMessage(WM_CLOSE); //鍏抽棴瀵硅瘽妗?br>
銆}
銆else
{
銆銆SetActiveWindow();
銆銆KillTimer(1) ; //娓呴櫎WM_TIMER浜嬩歡
銆}
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
銆SetTimer(1,0,NULL); //娣誨姞ID涓?鐨刉M_TIMER浜?
浠?br>
銆Splash=new CSplashDlg();
銆Splash->Create(IDD_DIALOG1);
銆Splash->ShowWindow(SW_SHOW);
銆…
} 
#include "Splash1.h" //鍔犲湪Cover.cpp鏂囦歡鐨勫ご鏂囦歡璋冪敤閮ㄤ綅
BOOL CCoverApp::InitInstance()
{
銆CCommandLineInfo cmdInfo;
銆ParseCommandLine(cmdInfo);
銆CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);
銆
} 
#include "Splash1.h" //鍔犲湪CoverDlg.cpp鏂囦歡鐨勫ご鏂囦歡璋冪敤閮ㄤ綅
int CCoverDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
銆
銆CSplashWnd::ShowSplashScreen(this); //鏄劇ず鍚姩鐢婚潰
銆
}