读入一些整数,逆序输出 :
#include <iostream>
using namespace std;
int main()
{
const int MAX = 100;
int arr[MAX];
int temp,index=0;
while(cin>>temp,temp!=0)
arr[index++]=temp;
while(index>0)
cout<<arr[--index]<<" ";
return 0 ;
}
n盏灯,编号1-n,第1个人把所有的灯打开,第二个按下所有编号为2的倍数的开关,第3个人按下第三倍数的开关,以此类推,一共有k个人,问最后有哪些灯开着?
输入n和k,输出开着的灯编号.
输入: 7 3
输出:1 5 6 7
#include <iostream>
using namespace std;
int main()
{
int n=0,k=0;//初始化n为灯 k为人的个数
cin>>n>>k;
int lamp[100];
for(int i = 0;i!=n;++i){
lamp[i]=0;
}
for(int i = 1;i<=k;++i)
{
for(int j = 1;j <= n/i;++j)
{
lamp[i*j-1]=!lamp[i*j-1];
}
}
for(int i = 0;i!=n;++i)
if(lamp[i]!=0)
cout<<i+1<<" ";
return 0 ;
return 0 ;
}
红色循环部分.改成
for(int j=1;j<=n;++j){if(j%i==0)lamp[j-1]=! lamp[j-1];}
这样感觉效果更好.
蛇形填数
在n*n方阵里填入 1,2,...,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
上面的方阵,多余的空格只是为了便于观察规律,不比严格输出.n<=8;
#include <iostream>
using namespace std;
int main()
{
const int MAX =10;
int snake[MAX][MAX];
for(int i =0;i!=MAX;++i){
for(int j =0;j!=MAX;++j)
snake[i][j]=0;
}
int n,x,y;
cin>>n;
x=0;y= n-1;
int curNum= snake[x][y]=1;
while(curNum<n*n)
{
while(x+1<n&&snake[x+1][y]==0)
{
snake[++x][y]=++curNum;
}
while(y-1>=0&&snake[x][y-1]==0)
{
snake[x][--y]=++curNum;
}
while(x-1>=0&&snake[x-1][y]==0)
{
snake[--x][y]=++curNum;
}
while(y+1<n&&snake[x][y+1]==0)
{
snake[x][++y]=++curNum;
}
}
cout<<"最后curNum:"<<curNum<<endl;
cout<<"n*n:"<<n*n<<endl;
for(int i =0;i<n;i++)
{
for(int j = 0;j<n;j++)
cout<<snake[i][j]<<endl;
}
return 0 ;
}
最长回文子串:
输入一个字符串,求出其中最长的回文子串。子串:在原串中连续出现的字符串片段。判断是,应该忽略所有标点符号和空格,切忽略大小写,但输出应该保持原样。
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string test="youxixuoy you a re pig";
string s="";
int maxlen=0;
int locate[100];
int left=0,right=0;
for(string::size_type i = 0;i<=test.size();++i)
{
if(isalpha(test[i])){
s+=toupper(test[i]);
locate[s.size()-1]=i;
}
}
for(string::size_type i =0;i<=s.size();++i)
{
for(string::size_type j = i+1;j<=s.size();++j)
{
string word(s.begin()+i,s.begin()+j);
bool ok=true;
for(string::size_type m=0;m<=word.size()/2;++m)
{
if(word[m]!=word[word.size()-1-m])
ok = false;
}
if (ok)
{
if(word.size()>maxlen)
{
left = i;right =j;
maxlen=word.size();
}
}
}
}
for(int i = locate[left];i<=locate[right-1];i++)
cout<<test[i];
return 0 ;
}