HDU 1425 sort
#include
#include
using namespace std;
const int N = 1e6 + 5;
int a[N];
int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
for(int i=0;i=n-m;j--){
if(j == n-m)printf("%d\n",a[j]);
else printf("%d ",a[j]);
}
}
}
//通过STL库自带的sort()函数进行对数组的快排
POJ 1012 Joseph
#include
using namespace std;
int main(){
int n,a[15] = { 0, 2, 7, 5, 30, 169, 441, 1872, 7632, 1740, 93313, 459901, 1358657, 2504881 };
while(cin>>n){
if(n==0)return 0;
else cout<
//新天地,在题目例子有穷的情况下可提前算出答案,再用数组输出
HDU 1061 Rightmost Digit
#include
using namespace std;
int main(){
int n;
// cin>>n;
scanf("%d",&n);
while(n--){
long a,b;
scanf("%ld",&a);a=a%100;b=a;
for(long i=0;i
//由于题目规定输入的N有(1,1000000000),所以要用的long类型来储存,又因最右位的数只与所乘数的最右位有关,所以为了节省时间也为了防止TL,在得到a的时候,都要把a%100。讲道理可以用%10的吧,不过不知道怎么就WA了,就先用%100了,日后再去研究。
UVA 10082 WERTYU
思路:因题目要求都是往前错了一位,所以可以用数组按顺序保存键盘上的字符,当接收到 这个字符 时,就输出后一个字符。
#include
#include
int main()
{
int i,n;
char ch;
char s[]="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
n=strlen(s);
while(scanf("%c",&ch)==1)
{
for(i=0;s[i]!=ch&&i
UVA 1225 Digit Counting
思路:用新学的stringstream方法,把从循环中得出的数字 先转化为字符串,用字符串长度做循环的上限,把每个字符s[i]提取出来后再转化为数字,使a[s[i]]++;
最后遍历输出 a数组;
#include
#include
#include
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
int length,m,p,a[10]={0,0};
stringstream stream;
string result;
cin>>m;
for(int i=1;i<=m;i++){
stream << i; //将int输入流
stream >> result; //从stream中抽取前面插入的int值
length=result.length();
stream.clear();
for(int j=0;j<=length;j++){
if(result[j]>='0' && result[j]<='9')
{stream<>p;
stream.clear();
a[p]++;}
}
}
cout<
UVA 10340 All in All
思路:双重循环
#include
#include
#define M 100000
int main()
{
char ch1[M+1],ch2[M+1];
while(~scanf("%s %s",ch1,ch2))
{
int len1,len2,i,j,k;
len1=strlen(ch1);
len2=strlen(ch2);
k=j=0;
for(i=0;i
UVA 489 Hangman Judge
//侩子手,先将两个字符串排序,并将重复的字符清除一个,设定len为总共需要对的数,用str.find(str[i])确定 该值是否在str中
//sort 排序 string
sort(str.begin(),str.end());
#include
using namespace std;
int main(){
int ss,test=-1;
while(cin>>ss && ss!=test){
string s1,s2;
cin>>s1>>s2;
int len2 = s2.length(),len1 = s1.length(),len=len1,f=0,t=0;
sort(s1.begin(),s1.end());
for(int j=0;j= 0) && (find < len1)){
t++;
}
else f++;
cout<<"find="<
UVA 133 The Dole Queue
先设置一个各项均为1的数组,代表人还活着,while(n–)表示总共至少该运行几次,
k=k0; for(int i=0;i
用两次循环的方式,遍历数组每个活着的人,记录他们的坐标k1,k2,到最后在将他们变为0,防止两数重合时产生错误。
UVA 253 涂色子 Cube painting
思路:题目的input按图的要求输入字符串,用erase函数截成s1,s2并swap1,5的值,保持每两个元素对应着相对的面,双重循环,若有两个面相同,则取出两个对面代表的四个元素,直到循环结束,若s1.length()==0,那么TRUE,else,FALSE
#include
using namespace std;
int main(){
string s;
while(cin>>s){
string s1,s2;
s1=s;s2=s;
s1.erase(6,6);
s2.erase(0,6);
swap(s1[1],s1[5]);
swap(s2[1],s2[5]);
// cout<